<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" lang="en">

<head>
  <link href='https://fonts.googleapis.com/css?family=Inconsolata' rel='stylesheet' type='text/css' /><title>db.collection.mapReduce() &mdash; MongoDB Manual</title><link rel="shortcut icon" href="https://media.mongodb.org/favicon.ico" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="robots" content="index" />

  <meta name="release" content="4.2.5"/>
  <meta name="version" content="4.2"/>
  <meta name="DC.Source" content="https://github.com/mongodb/docs/blob/v4.2/source/reference/method/db.collection.mapReduce.txt"/>
  <meta property="og:image" content="http://s3.amazonaws.com/info-mongodb-com/_com_assets/cms/mongodb-for-giant-ideas-bbab5c3cf8.png">
  <meta property="og:image:secure_url" content="https://webassets.mongodb.com/_com_assets/cms/mongodb-for-giant-ideas-bbab5c3cf8.png">
      <link rel="canonical" href="https://docs.mongodb.com/manual/reference/method/db.collection.mapReduce" />
  
   <link rel="stylesheet" href="../../_static/mongodb-docs.css" type="text/css" />
   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
   <link rel="stylesheet" href="../../_static/css/navbar.min.css" type="text/css" />
    
    <script type="text/javascript" src="../../_static/lib/jquery.min.js"></script>
    <script type="text/javascript" src="../../_static/underscore.js"></script>
    <script type="text/javascript" src="../../_static/lib/bootstrap.js"></script>
    <script type="text/javascript" src="../../_static/lib/jquery.cookie.js"></script>
    <script type="text/javascript" src="../../_static/controller.js"></script>
      <link rel="search" type="application/opensearchdescription+xml" href="https://docs.mongodb.com/osd.xml" title="MongoDB Help"/>
<link rel="author" title="About these documents" href="../../about.html" />
<!-- <link rel="index" title="Index" href="../../genindex.html" /> -->
<link rel="search" title="Search" href="../../search.html" />
<link rel="top" title="MongoDB Manual" href="../../index.html" />
<link rel="up" title="Collection Methods" href="js-collection.html" />
<link rel="next" title="db.collection.reIndex()" href="db.collection.reIndex.html" />
<link rel="prev" title="db.collection.latencyStats()" href="db.collection.latencyStats.html" /><script type='text/javascript'>
   var gptadslots=[];
   var googletag = googletag || {};
   googletag.cmd = googletag.cmd || [];
   (function(){ var gads = document.createElement('script');
      gads.async = true; gads.type = 'text/javascript';
      var useSSL = 'https:' == document.location.protocol;
      gads.src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js';
      var node = document.getElementsByTagName('script')[0];
      node.parentNode.insertBefore(gads, node);
   })();
</script>

<script type="text/javascript">
   googletag.cmd.push(function() {

      var pathname = location.href;
      
      if ( (pathname.indexOf("auth") >= 0) || (pathname.indexOf("security") >= 0) ) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/security', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if ( (pathname.indexOf("crud") >= 0) ||  (pathname.indexOf("query") >= 0) || (pathname.indexOf("insert") >= 0) || (pathname.indexOf("update") >= 0) || (pathname.indexOf("remove") >= 0) || (pathname.indexOf("delete") >= 0) || (pathname.indexOf("aggregation") >= 0) ) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/crud', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("shard") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/sharding', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("replica") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/replication', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("model") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/data-modeling', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("administration") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/support', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("install-mongodb-on-windows") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/install-mongodb-on-windows', [160, 600], 'mongodb-docs-1').addService(googletag.pubads());
      } else if (pathname.indexOf("tutorial/getting-started") >= 0) {
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org/docs_server_gettingstarted', [160, 600], 'mongodb-docs-1').addService(googletag.pubads());
      } else {
         //Adslot 1 declaration
         gptadslots[1]= googletag.defineSlot('/40039723/docs.mongodb.org', [[160,600],[243,202],[293,244]],'mongodb-docs-1').addService(googletag.pubads());
      }
      googletag.pubads().enableSingleRequest();
      googletag.pubads().enableAsyncRendering();
      googletag.enableServices();
   });
</script></head>
<body data-project="manual" data-project-title="MongoDB Manual" data-branch="v4.2" data-enable-marian=1>
  <!-- Google Tag Manager -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-JQHP"
                    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push(
     {'gtm.start': new Date().getTime(),event:'gtm.js'}
   );var f=d.getElementsByTagName(s)[0],
   j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
   '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
   })(window,document,'script','dataLayer','GTM-JQHP');</script>
  <!-- End Google Tag Manager -->
<div id="navbar" data-navprops='{"links": [{"url": "https://docs.mongodb.com/manual/","text": "Server","active": true},{"url": "https://docs.mongodb.com/ecosystem/drivers/","text": "Drivers"},{"url": "https://docs.mongodb.com/cloud/","text": "Cloud"},{"url": "https://docs.mongodb.com/tools/","text": "Tools"},{"url": "https://docs.mongodb.com/guides/","text": "Guides"}]}'></div>
      <script>
        window.googleSearchCx = "017213726194841070573:WMX6838984"
	window.googleSearchPlaceholder = "Search Documentation"
        window.googleSearchResultsUrl = "http://docs.mongodb.com/manual/search/"
      </script>
    <script src="../../_static/navbar.min.js"></script>
  

  <div class="content" >

   <div id="left-column">
         <aside id="sidebar" class="sidebar">
             
  <div class="sphinxsidebar" id="sphinxsidebar">
    <div id="sphinxsidebarwrapper" class="sphinxsidebarwrapper"><a href="javascript:void(0)" class="closeNav" id="closeNav">Close &times;</a>


<h3>
  <a class="index-link" href="../../index.html">MongoDB Manual</a>
</h3>


    <div class="btn-group version-sidebar">
      <button type="button" class="version-button dropdown-toggle" data-toggle="dropdown">
        
        
        Version 4.2 (current)<span class="caret"></span>
      </button>
      <ul class="dropdown-menu" role="menu">
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="master">
              
              Version 4.4 (upcoming)
            </a>
          </li>
        
          
          <li class="active">
          
            <a href="#" data-path="manual">
              
              Version 4.2 (current)
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v4.0">
              
              Version 4.0
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v3.6">
              
              Version 3.6
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v3.4">
              
              Version 3.4
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v3.2">
              
              Version 3.2
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v3.0">
              
              Version 3.0
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v2.6">
              
              Version 2.6
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v2.4">
              
              Version 2.4
            </a>
          </li>
        
          
          <li>
          
            <a class="version-selector" href="#" data-path="v2.2">
              
              Version 2.2
            </a>
          </li>
        
      </ul>
    </div>


<ul class="current"><li class="toctree-l1"><a class="reference internal" href="../../introduction.html">Introduction</a><ul><li class="toctree-l2"><a class="reference internal" href="../../tutorial/getting-started.html">Getting Started</a></li><li class="toctree-l2"><a class="reference external" href="https://docs.atlas.mongodb.com/getting-started/">Create an Atlas Free Tier Cluster</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/databases-and-collections.html">Databases and Collections</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/views.html">Views</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/materialized-views.html">On-Demand Materialized Views</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/capped-collections.html">Capped Collections</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/document.html">Documents</a></li><li class="toctree-l2"><a class="reference internal" href="../bson-types.html">BSON Types</a><ul><li class="toctree-l3"><a class="reference internal" href="../bson-type-comparison-order.html">Comparison/Sort Order</a></li><li class="toctree-l3"><a class="reference internal" href="../mongodb-extended-json.html">MongoDB Extended JSON (v2)</a></li><li class="toctree-l3"><a class="reference internal" href="../mongodb-extended-json-v1.html">MongoDB Extended JSON (v1)</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a><ul><li class="toctree-l2"><a class="reference internal" href="../../administration/install-community.html">Install MongoDB Community Edition</a><ul><li class="toctree-l3"><a class="reference internal" href="../../administration/install-on-linux.html">Install on Linux</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-on-red-hat.html">Install on Red Hat</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/install-mongodb-on-red-hat-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-on-ubuntu.html">Install on Ubuntu</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/install-mongodb-on-ubuntu-tarball.html">Install using .tgz Tarball</a></li><li class="toctree-l5"><a class="reference internal" href="../installation-ubuntu-community-troubleshooting.html">Troubleshoot Ubuntu Installation</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-on-debian.html">Install on Debian</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/install-mongodb-on-debian-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-on-suse.html">Install on SUSE</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/install-mongodb-on-suse-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-on-amazon.html">Install on Amazon</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/install-mongodb-on-amazon-tarball.html">Install using .tgz Tarball</a></li></ul></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/install-mongodb-on-os-x.html">Install on macOS</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-on-os-x-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/install-mongodb-on-windows.html">Install on Windows</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-on-windows-unattended.html">Install using msiexec.exe</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../administration/install-enterprise.html">Install MongoDB Enterprise</a><ul><li class="toctree-l3"><a class="reference internal" href="../../administration/install-enterprise-linux.html">Install on Linux</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-red-hat.html">Install on Red Hat</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-red-hat-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-ubuntu.html">Install on Ubuntu</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-ubuntu-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-debian.html">Install on Debian</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-debian-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-suse.html">Install on SUSE</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-suse-tarball.html">Install using .tgz Tarball</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-amazon.html">Install on Amazon</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-amazon-tarball.html">Install using .tgz Tarball</a></li></ul></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-os-x.html">Install on macOS</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-windows.html">Install on Windows</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-on-windows-unattended.html">Install using msiexec.exe</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/install-mongodb-enterprise-with-docker.html">Install with Docker</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../administration/upgrade-community-to-enterprise.html">Upgrade MongoDB Community to MongoDB Enterprise</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/upgrade-to-enterprise-standalone.html">Upgrade to MongoDB Enterprise (Standalone)</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/upgrade-to-enterprise-replica-set.html">Upgrade to MongoDB Enterprise (Replica Set)</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/upgrade-to-enterprise-sharded-cluster.html">Upgrade to MongoDB Enterprise (Sharded Cluster)</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/verify-mongodb-packages.html">Verify Integrity of MongoDB Packages</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../mongo.html">The <code class="docutils literal"><span class="pre">mongo</span></code> Shell</a><ul><li class="toctree-l2"><a class="reference internal" href="../../tutorial/configure-mongo-shell.html">Configure the <code class="docutils literal"><span class="pre">mongo</span></code> Shell</a></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/access-mongo-shell-help.html">Access the <code class="docutils literal"><span class="pre">mongo</span></code> Shell Help</a></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/write-scripts-for-the-mongo-shell.html">Write Scripts for the <code class="docutils literal"><span class="pre">mongo</span></code> Shell</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/shell-types.html">Data Types in the <code class="docutils literal"><span class="pre">mongo</span></code> Shell</a></li><li class="toctree-l2"><a class="reference internal" href="../mongo-shell.html"><code class="docutils literal"><span class="pre">mongo</span></code> Shell Quick Reference</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../crud.html">MongoDB CRUD Operations</a><ul><li class="toctree-l2"><a class="reference internal" href="../../tutorial/insert-documents.html">Insert Documents</a><ul><li class="toctree-l3"><a class="reference internal" href="../insert-methods.html">Insert Methods</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/query-documents.html">Query Documents</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/query-embedded-documents.html">Query on Embedded/Nested Documents</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/query-arrays.html">Query an Array</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/query-array-of-documents.html">Query an Array of Embedded Documents</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/project-fields-from-query-results.html">Project Fields to Return from Query</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/query-for-null-fields.html">Query for Null or Missing Fields</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/iterate-a-cursor.html">Iterate a Cursor in the <code class="docutils literal"><span class="pre">mongo</span></code> Shell</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/update-documents.html">Update Documents</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/update-documents-with-aggregation-pipeline.html">Updates with Aggregation Pipeline</a></li><li class="toctree-l3"><a class="reference internal" href="../update-methods.html">Update Methods</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/remove-documents.html">Delete Documents</a><ul><li class="toctree-l3"><a class="reference internal" href="../delete-methods.html">Delete Methods</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/bulk-write-operations.html">Bulk Write Operations</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/retryable-writes.html">Retryable Writes</a></li><li class="toctree-l2"><a class="reference internal" href="../sql-comparison.html">SQL to MongoDB Mapping Chart</a></li><li class="toctree-l2"><a class="reference internal" href="../../text-search.html">Text Search</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/link-text-indexes.html">Text Indexes</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/text-search-operators.html">Text Search Operators</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/text-search-in-aggregation.html">Text Search in the Aggregation Pipeline</a></li><li class="toctree-l3"><a class="reference internal" href="../text-search-languages.html">Text Search Languages</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../geospatial-queries.html">Geospatial Queries</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/geospatial-tutorial.html">Find Restaurants with Geospatial Queries</a></li><li class="toctree-l3"><a class="reference internal" href="../geojson.html">GeoJSON Objects</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../read-concern.html">Read Isolation (Read Concern)</a><ul><li class="toctree-l3"><a class="reference internal" href="../read-concern-local.html">Read Concern <code class="docutils literal"><span class="pre">&quot;local&quot;</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../read-concern-available.html">Read Concern <code class="docutils literal"><span class="pre">&quot;available&quot;</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../read-concern-majority.html">Read Concern <code class="docutils literal"><span class="pre">&quot;majority&quot;</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../read-concern-linearizable.html">Read Concern <code class="docutils literal"><span class="pre">&quot;linearizable&quot;</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../read-concern-snapshot.html">Read Concern <code class="docutils literal"><span class="pre">&quot;snapshot&quot;</span></code></a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../write-concern.html">Write Acknowledgement (Write Concern)</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/crud.html">MongoDB CRUD Concepts</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/write-operations-atomicity.html">Atomicity and Transactions</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/read-isolation-consistency-recency.html">Read Isolation, Consistency, and Recency</a><ul><li class="toctree-l4"><a class="reference internal" href="../../core/causal-consistency-read-write-concerns.html">Causal Consistency and Read and Write Concerns</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../core/distributed-queries.html">Distributed Queries</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/perform-findAndModify-linearizable-reads.html">Linearizable Reads via <code class="docutils literal"><span class="pre">findAndModify</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../../core/query-plans.html">Query Plans</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/query-optimization.html">Query Optimization</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/evaluate-operation-performance.html">Evaluate Performance of Current Operations</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/optimize-query-performance-with-indexes-and-projections.html">Optimize Query Performance</a></li><li class="toctree-l4"><a class="reference internal" href="../../core/write-performance.html">Write Operation Performance</a></li><li class="toctree-l4"><a class="reference internal" href="../explain-results.html">Explain Results</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/analyze-query-plan.html">Analyze Query Performance</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/tailable-cursors.html">Tailable Cursors</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../aggregation.html">Aggregation</a><ul><li class="toctree-l2"><a class="reference internal" href="../../core/aggregation-pipeline.html">Aggregation Pipeline</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/aggregation-pipeline-optimization.html">Aggregation Pipeline Optimization</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/aggregation-pipeline-limits.html">Aggregation Pipeline Limits</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/aggregation-pipeline-sharded-collections.html">Aggregation Pipeline and Sharded Collections</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/aggregation-zip-code-data-set.html">Example with ZIP Code Data</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/aggregation-with-user-preference-data.html">Example with User Preference Data</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/map-reduce.html">Map-Reduce</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/map-reduce-sharded-collections.html">Map-Reduce and Sharded Collections</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/map-reduce-concurrency.html">Map-Reduce Concurrency</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/map-reduce-examples.html">Map-Reduce Examples</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/perform-incremental-map-reduce.html">Perform Incremental Map-Reduce</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/troubleshoot-map-function.html">Troubleshoot the Map Function</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/troubleshoot-reduce-function.html">Troubleshoot the Reduce Function</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../aggregation.html">Aggregation Reference</a><ul><li class="toctree-l3"><a class="reference internal" href="../../meta/aggregation-quick-reference.html">Aggregation Pipeline Quick Reference</a></li><li class="toctree-l3"><a class="reference internal" href="../operator/aggregation/interface.html">Aggregation Commands</a></li><li class="toctree-l3"><a class="reference internal" href="../aggregation-commands-comparison.html">Aggregation Commands Comparison</a></li><li class="toctree-l3"><a class="reference internal" href="../aggregation-variables.html">Variables in Aggregation Expressions</a></li><li class="toctree-l3"><a class="reference internal" href="../sql-aggregation-comparison.html">SQL to Aggregation Mapping Chart</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../data-modeling.html">Data Models</a><ul><li class="toctree-l2"><a class="reference internal" href="../../core/data-modeling-introduction.html">Data Modeling Introduction</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/schema-validation.html">Schema Validation</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/data-models.html">Data Modeling Concepts</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/data-model-design.html">Data Model Design</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/data-model-operations.html">Operational Factors and Data Models</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../applications/data-models.html">Data Model Examples and Patterns</a><ul><li class="toctree-l3"><a class="reference internal" href="../../applications/data-models-relationships.html">Model Relationships Between Documents</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-embedded-one-to-one-relationships-between-documents.html">Model One-to-One Relationships with Embedded Documents</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-embedded-one-to-many-relationships-between-documents.html">Model One-to-Many Relationships with Embedded Documents</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-referenced-one-to-many-relationships-between-documents.html">Model One-to-Many Relationships with Document References</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../applications/data-models-tree-structures.html">Model Tree Structures</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-tree-structures-with-parent-references.html">Model Tree Structures with Parent References</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-tree-structures-with-child-references.html">Model Tree Structures with Child References</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-tree-structures-with-ancestors-array.html">Model Tree Structures with an Array of Ancestors</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-tree-structures-with-materialized-paths.html">Model Tree Structures with Materialized Paths</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-tree-structures-with-nested-sets.html">Model Tree Structures with Nested Sets</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../applications/data-models-applications.html">Model Specific Application Contexts</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-data-for-atomic-operations.html">Model Data for Atomic Operations</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-data-for-keyword-search.html">Model Data to Support Keyword Search</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-data-for-schema-versioning.html">Model Data for Schema Versioning</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-monetary-data.html">Model Monetary Data</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-time-data.html">Model Time Data</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/model-computed-data.html">Model Computed Data</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../data-models.html">Data Model Reference</a><ul><li class="toctree-l3"><a class="reference internal" href="../database-references.html">Database References</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../core/transactions.html">Transactions</a><ul><li class="toctree-l2"><a class="reference internal" href="../../core/transactions-in-applications.html">Drivers API</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/transactions-production-consideration.html">Production Considerations</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/transactions-sharded-clusters.html">Production Considerations (Sharded Clusters)</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/transactions-operations.html">Transactions and Operations</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../indexes.html">Indexes</a><ul><li class="toctree-l2"><a class="reference internal" href="../../core/index-single.html">Single Field Indexes</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/index-compound.html">Compound Indexes</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/index-multikey.html">Multikey Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/multikey-index-bounds.html">Multikey Index Bounds</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/index-text.html">Text Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/specify-language-for-text-index.html">Specify a Language for Text Index</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/avoid-text-index-name-limit.html">Specify Name for <code class="docutils literal"><span class="pre">text</span></code> Index</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/control-results-of-text-search.html">Control Search Results with Weights</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/limit-number-of-items-scanned-for-text-search.html">Limit the Number of Entries Scanned</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/index-wildcard.html">Wildcard Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="../index-wildcard-restrictions.html">Wildcard Index Restrictions</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/2dsphere.html"><code class="docutils literal"><span class="pre">2dsphere</span></code> Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/query-a-2dsphere-index.html">Query a <code class="docutils literal"><span class="pre">2dsphere</span></code> Index</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/2d.html"><code class="docutils literal"><span class="pre">2d</span></code> Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/build-a-2d-index.html">Create a <code class="docutils literal"><span class="pre">2d</span></code> Index</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/query-a-2d-index.html">Query a <code class="docutils literal"><span class="pre">2d</span></code> Index</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/geospatial-indexes.html"><code class="docutils literal"><span class="pre">2d</span></code> Index Internals</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/calculate-distances-using-spherical-geometry-with-2d-geospatial-indexes.html">Calculate Distance Using Spherical Geometry</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/geohaystack.html"><code class="docutils literal"><span class="pre">geoHaystack</span></code> Indexes</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/build-a-geohaystack-index.html">Create a Haystack Index</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/query-a-geohaystack-index.html">Query a Haystack Index</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/index-hashed.html">Hashed Indexes</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/index-properties.html">Index Properties</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/index-ttl.html">TTL Indexes</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/expire-data.html">Expire Data from Collections by Setting TTL</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../core/index-unique.html">Unique Indexes</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/index-partial.html">Partial Indexes</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/index-case-insensitive.html">Case Insensitive Indexes</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/index-sparse.html">Sparse Indexes</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/index-creation.html">Index Builds on Populated Collections</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/build-indexes-on-replica-sets.html">Build Indexes on Replica Sets</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/build-indexes-on-sharded-clusters.html">Build Indexes on Sharded Clusters</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/index-intersection.html">Index Intersection</a></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/manage-indexes.html">Manage Indexes</a></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/measure-index-use.html">Measure Index Use</a></li><li class="toctree-l2"><a class="reference internal" href="../../applications/indexes.html">Indexing Strategies</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/create-indexes-to-support-queries.html">Create Indexes to Support Your Queries</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/sort-results-with-indexes.html">Use Indexes to Sort Query Results</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/ensure-indexes-fit-ram.html">Ensure Indexes Fit in RAM</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/create-queries-that-ensure-selectivity.html">Create Queries that Ensure Selectivity</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../indexes.html">Indexing Reference</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../security.html">Security</a><ul><li class="toctree-l2"><a class="reference internal" href="../../administration/security-checklist.html">Security Checklist</a></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/enable-authentication.html">Enable Access Control</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/authentication.html">Authentication</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/security-users.html">Users</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/create-users.html">Add Users</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../core/authentication-mechanisms.html">Authentication Mechanisms</a><ul><li class="toctree-l4"><a class="reference internal" href="../../core/security-scram.html">SCRAM</a></li><li class="toctree-l4"><a class="reference internal" href="../../core/security-x.509.html">x.509</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/configure-x509-client-authentication.html">Use x.509 Certificates to Authenticate Clients</a></li></ul></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../core/authentication-mechanisms-enterprise.html">Enterprise Authentication Mechanisms</a><ul><li class="toctree-l4"><a class="reference internal" href="../../core/kerberos.html">Kerberos Authentication</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/control-access-to-mongodb-with-kerberos-authentication.html">Configure MongoDB with Kerberos Authentication on Linux</a></li><li class="toctree-l5"><a class="reference internal" href="../../tutorial/control-access-to-mongodb-windows-with-kerberos-authentication.html">Configure MongoDB with Kerberos Authentication on Windows</a></li><li class="toctree-l5"><a class="reference internal" href="../../tutorial/troubleshoot-kerberos.html">Troubleshoot Kerberos Authentication</a></li><li class="toctree-l5"><a class="reference internal" href="../../tutorial/kerberos-auth-activedirectory-authz.html">Configure MongoDB with Kerberos Authentication and Active Directory Authorization</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../../core/security-ldap.html">LDAP Proxy Authentication</a><ul><li class="toctree-l5"><a class="reference internal" href="../../tutorial/configure-ldap-sasl-activedirectory.html">Authenticate Using SASL and LDAP with ActiveDirectory</a></li><li class="toctree-l5"><a class="reference internal" href="../../tutorial/configure-ldap-sasl-openldap.html">Authenticate Using SASL and LDAP with OpenLDAP</a></li><li class="toctree-l5"><a class="reference internal" href="../../tutorial/authenticate-nativeldap-activedirectory.html">Authenticate and Authorize Users Using Active Directory via Native LDAP</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../../core/security-ldap-external.html">LDAP Authorization</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../core/security-internal-authentication.html">Internal/Membership Authentication</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/deploy-replica-set-with-keyfile-access-control.html">Deploy Replica Set With Keyfile Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/enforce-keyfile-access-control-in-existing-replica-set.html">Update Replica Set to Keyfile Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/enforce-keyfile-access-control-in-existing-replica-set-without-downtime.html">Update Replica Set to Keyfile Authentication (No Downtime)</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/rotate-key-replica-set.html">Rotate Keys for Replica Sets</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/deploy-sharded-cluster-with-keyfile-access-control.html">Deploy Sharded Cluster with Keyfile Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/enforce-keyfile-access-control-in-existing-sharded-cluster.html">Update Sharded Cluster to Keyfile Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/enforce-keyfile-access-control-in-existing-sharded-cluster-no-downtime.html">Update Sharded Cluster to Keyfile Authentication (No Downtime)</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/rotate-key-sharded-cluster.html">Rotate Keys for Sharded Clusters</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/configure-x509-member-authentication.html">Use x.509 Certificate for Membership Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/upgrade-keyfile-to-x509.html">Upgrade from Keyfile Authentication to x.509 Authentication</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/rotate-x509-membership-certificates.html">Rolling Update of x.509 Cluster Certificates that Contain New DN</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/authorization.html">Role-Based Access Control</a><ul><li class="toctree-l3"><a class="reference internal" href="../built-in-roles.html">Built-In Roles</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/security-user-defined-roles.html">User-Defined Roles</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/manage-users-and-roles.html">Manage Users and Roles</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/change-own-password-and-custom-data.html">Change Your Password and Custom Data</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/collection-level-access-control.html">Collection-Level Access Control</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/security-transport-encryption.html">TLS/SSL (Transport Encryption)</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-ssl.html">Configure <code class="docutils literal"><span class="pre">mongod</span></code> and <code class="docutils literal"><span class="pre">mongos</span></code> for TLS/SSL</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-ssl-clients.html">TLS/SSL Configuration for Clients</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/upgrade-cluster-to-ssl.html">Upgrade a Cluster to Use TLS/SSL</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-fips.html">Configure MongoDB for FIPS</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/security-encryption-at-rest.html">Encryption at Rest</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-encryption.html">Configure Encryption</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/rotate-encryption-key.html">Rotate Encryption Keys</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/security-client-side-encryption.html">Client-Side Field Level Encryption</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/security-automatic-client-side-encryption.html">Automatic Client-Side Field Level Encryption</a><ul><li class="toctree-l4"><a class="reference internal" href="../security-client-side-automatic-json-schema.html">Automatic Encryption Rules</a></li><li class="toctree-l4"><a class="reference internal" href="../security-client-side-query-aggregation-support.html">Read/Write Support with Automatic Field Level Encryption</a></li><li class="toctree-l4"><a class="reference internal" href="../security-client-side-encryption-appendix.html">Appendix</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../core/security-explicit-client-side-encryption.html">Explicit (Manual) Client-Side Field Level Encryption</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/security-client-side-encryption-key-management.html">Master Key and Data Encryption Key Management</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/manage-client-side-encryption-data-keys.html">Manage Data Encryption Keys</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../security-client-side-encryption-limitations.html">Limitations</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/auditing.html">Auditing</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-auditing.html">Configure Auditing</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-audit-filters.html">Configure Audit Filters</a></li><li class="toctree-l3"><a class="reference internal" href="../audit-message.html">System Event Audit Messages</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/security-hardening.html">Network and Configuration Hardening</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/security-mongodb-configuration.html">IP Binding</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-linux-iptables-firewall.html">Configure Linux <code class="docutils literal"><span class="pre">iptables</span></code> Firewall for MongoDB</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-windows-netsh-firewall.html">Configure Windows <code class="docutils literal"><span class="pre">netsh</span></code> Firewall for MongoDB</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/implement-field-level-redaction.html">Implement Field Level Redaction</a></li><li class="toctree-l2"><a class="reference internal" href="../security.html">Security Reference</a><ul><li class="toctree-l3"><a class="reference internal" href="../system-roles-collection.html"><code class="docutils literal"><span class="pre">system.roles</span></code> Collection</a></li><li class="toctree-l3"><a class="reference internal" href="../system-users-collection.html"><code class="docutils literal"><span class="pre">system.users</span></code> Collection</a></li><li class="toctree-l3"><a class="reference internal" href="../resource-document.html">Resource Document</a></li><li class="toctree-l3"><a class="reference internal" href="../privilege-actions.html">Privilege Actions</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/create-a-vulnerability-report.html">Create a Vulnerability Report</a></li><li class="toctree-l2"><a class="reference internal" href="../../appendix/security.html">Appendix</a><ul><li class="toctree-l3"><a class="reference internal" href="../../appendix/security/appendixA-openssl-ca.html">Appendix A - OpenSSL CA Certificate for Testing</a></li><li class="toctree-l3"><a class="reference internal" href="../../appendix/security/appendixB-openssl-server.html">Appendix B - OpenSSL Server Certificates for Testing</a></li><li class="toctree-l3"><a class="reference internal" href="../../appendix/security/appendixC-openssl-client.html">Appendix C - OpenSSL Client Certificates for Testing</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../changeStreams.html">Change Streams</a><ul><li class="toctree-l2"><a class="reference internal" href="../../administration/change-streams-production-recommendations.html">Change Streams Production Recommendations</a></li><li class="toctree-l2"><a class="reference internal" href="../change-events.html">Change Events</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../replication.html">Replication</a><ul><li class="toctree-l2"><a class="reference internal" href="../../core/replica-set-members.html">Replica Set Members</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/replica-set-primary.html">Replica Set Primary</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/replica-set-secondary.html">Replica Set Secondary Members</a><ul><li class="toctree-l4"><a class="reference internal" href="../../core/replica-set-priority-0-member.html">Priority 0 Replica Set Members</a></li><li class="toctree-l4"><a class="reference internal" href="../../core/replica-set-hidden-member.html">Hidden Replica Set Members</a></li><li class="toctree-l4"><a class="reference internal" href="../../core/replica-set-delayed-member.html">Delayed Replica Set Members</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../core/replica-set-arbiter.html">Replica Set Arbiter</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/replica-set-oplog.html">Replica Set Oplog</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/replica-set-sync.html">Replica Set Data Synchronization</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/replica-set-architectures.html">Replica Set Deployment Architectures</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/replica-set-architecture-three-members.html">Three Member Replica Sets</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/replica-set-architecture-geographically-distributed.html">Replica Sets Distributed Across Two or More Data Centers</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/replica-set-high-availability.html">Replica Set High Availability</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/replica-set-elections.html">Replica Set Elections</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/replica-set-rollbacks.html">Rollbacks During Replica Set Failover</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../applications/replication.html">Replica Set Read and Write Semantics</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/replica-set-write-concern.html">Write Concern for Replica Sets</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/read-preference.html">Read Preference</a><ul><li class="toctree-l4"><a class="reference internal" href="../../core/read-preference-tags.html">Tag Sets</a></li><li class="toctree-l4"><a class="reference internal" href="../../core/read-preference-staleness.html">maxStalenessSeconds</a></li><li class="toctree-l4"><a class="reference internal" href="../../core/read-preference-use-cases.html">Read Preference Use Cases</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../core/read-preference-mechanics.html">Server Selection Algorithm</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../administration/replica-set-deployment.html">Replica Set Deployment Tutorials</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/deploy-replica-set.html">Deploy a Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/deploy-replica-set-for-testing.html">Deploy a Replica Set for Testing and Development</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/deploy-geographically-distributed-replica-set.html">Deploy a Geographically Redundant Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/add-replica-set-arbiter.html">Add an Arbiter to Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/convert-standalone-to-replica-set.html">Convert a Standalone to a Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/expand-replica-set.html">Add Members to a Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/remove-replica-set-member.html">Remove Members from Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/replace-replica-set-member.html">Replace a Replica Set Member</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../administration/replica-set-member-configuration.html">Member Configuration Tutorials</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/adjust-replica-set-member-priority.html">Adjust Priority for Replica Set Member</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-secondary-only-replica-set-member.html">Prevent Secondary from Becoming Primary</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-a-hidden-replica-set-member.html">Configure a Hidden Replica Set Member</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-a-delayed-replica-set-member.html">Configure a Delayed Replica Set Member</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-a-non-voting-replica-set-member.html">Configure Non-Voting Replica Set Member</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/convert-secondary-into-arbiter.html">Convert a Secondary to an Arbiter</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../administration/replica-set-maintenance.html">Replica Set Maintenance Tutorials</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/change-oplog-size.html">Change the Size of the Oplog</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/perform-maintence-on-replica-set-members.html">Perform Maintenance on Replica Set Members</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/force-member-to-be-primary.html">Force a Member to Become Primary</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/resync-replica-set-member.html">Resync a Member of a Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-replica-set-tag-sets.html">Configure Replica Set Tag Sets</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/reconfigure-replica-set-with-unavailable-members.html">Reconfigure a Replica Set with Unavailable Members</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/manage-chained-replication.html">Manage Chained Replication</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/change-hostnames-in-a-replica-set.html">Change Hostnames in a Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/configure-replica-set-secondary-sync-target.html">Configure a Secondary’s Sync Target</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../replication.html">Replication Reference</a><ul><li class="toctree-l3"><a class="reference internal" href="../replica-configuration.html">Replica Set Configuration</a></li><li class="toctree-l3"><a class="reference internal" href="../replica-set-protocol-versions.html">Replica Set Protocol Version</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/troubleshoot-replica-sets.html">Troubleshoot Replica Sets</a></li><li class="toctree-l3"><a class="reference internal" href="../local-database.html">The <code class="docutils literal"><span class="pre">local</span></code> Database</a></li><li class="toctree-l3"><a class="reference internal" href="../replica-states.html">Replica Set Member States</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../sharding.html">Sharding</a><ul><li class="toctree-l2"><a class="reference internal" href="../../core/sharded-cluster-components.html">Sharded Cluster Components</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/sharded-cluster-shards.html">Shards</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/sharded-cluster-config-servers.html">Config Servers (metadata)</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/sharded-cluster-query-router.html">Router (mongos)</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/sharding-shard-key.html">Shard Keys</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/hashed-sharding.html">Hashed Sharding</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/ranged-sharding.html">Ranged Sharding</a></li><li class="toctree-l2"><a class="reference internal" href="../../tutorial/deploy-shard-cluster.html">Deploy a Sharded Cluster</a></li><li class="toctree-l2"><a class="reference internal" href="../../core/zone-sharding.html">Zones</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/manage-shard-zone.html">Manage Shard Zones</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/sharding-segmenting-data-by-location.html">Segmenting Data by Location</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/sharding-tiered-hardware-for-varying-slas.html">Tiered Hardware for Varying SLA or SLO</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/sharding-segmenting-shards.html">Segmenting Data by Application or Customer</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/sharding-high-availability-writes.html">Distributed Local Writes for Insert Only Workloads</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/sharding-data-partitioning.html">Data Partitioning with Chunks</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/create-chunks-in-sharded-cluster.html">Create Chunks in a Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/split-chunks-in-sharded-cluster.html">Split Chunks in a Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/merge-chunks-in-sharded-cluster.html">Merge Chunks in a Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/modify-chunk-size-in-sharded-cluster.html">Modify Chunk Size in a Sharded Cluster</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/sharding-balancer-administration.html">Balancer</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/manage-sharded-cluster-balancer.html">Manage Sharded Cluster Balancer</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/migrate-chunks-in-sharded-cluster.html">Migrate Chunks in a Sharded Cluster</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../administration/sharded-cluster-administration.html">Administration</a><ul><li class="toctree-l3"><a class="reference internal" href="../../administration/sharded-cluster-config-servers.html">Config Server Administration</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/replace-config-server.html">Replace a Config Server</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/view-sharded-cluster-configuration.html">View Cluster Configuration</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/restart-sharded-cluster.html">Restart a Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/migrate-sharded-cluster-to-new-hardware.html">Migrate a Sharded Cluster to Different Hardware</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/add-shards-to-shard-cluster.html">Add Shards to a Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/remove-shards-from-cluster.html">Remove Shards from an Existing Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/clear-jumbo-flag.html">Clear <code class="docutils literal"><span class="pre">jumbo</span></code> Flag</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/backup-sharded-cluster-metadata.html">Back Up Cluster Metadata</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/convert-sharded-cluster-to-replica-set.html">Convert Sharded Cluster to Replica Set</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/convert-replica-set-to-replicated-shard-cluster.html">Convert a Replica Set to a Sharded Cluster</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/convert-shard-standalone-to-shard-replica-set.html">Convert a Shard Standalone to a Shard Replica Set</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../sharding.html">Sharding Reference</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/sharded-cluster-requirements.html">Operational Restrictions</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/troubleshoot-sharded-clusters.html">Troubleshoot Sharded Clusters</a></li><li class="toctree-l3"><a class="reference internal" href="../config-database.html">Config Database</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../administration.html">Administration</a><ul><li class="toctree-l2"><a class="reference internal" href="../../administration/production-notes.html">Production Notes</a></li><li class="toctree-l2"><a class="reference internal" href="../../administration/production-checklist-operations.html">Operations Checklist</a></li><li class="toctree-l2"><a class="reference internal" href="../../administration/production-checklist-development.html">Development Checklist</a></li><li class="toctree-l2"><a class="reference internal" href="../../administration/analyzing-mongodb-performance.html">Performance</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/manage-the-database-profiler.html">Database Profiler</a><ul><li class="toctree-l4"><a class="reference internal" href="../database-profiler.html">Database Profiler Output</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/transparent-huge-pages.html">Disable Transparent Huge Pages (THP)</a></li><li class="toctree-l3"><a class="reference internal" href="../ulimit.html">UNIX <code class="docutils literal"><span class="pre">ulimit</span></code> Settings</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../administration/configuration-and-maintenance.html">Configuration and Maintenance</a><ul><li class="toctree-l3"><a class="reference internal" href="../../administration/configuration.html">Run-time Database Configuration</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/upgrade-revision.html">Upgrade to the Latest Revision of MongoDB</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/manage-mongodb-processes.html">Manage <code class="docutils literal"><span class="pre">mongod</span></code> Processes</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/terminate-running-operations.html">Terminate Running Operations</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/rotate-log-files.html">Rotate Log Files</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../data-center-awareness.html">Data Center Awareness</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/workload-isolation.html">Workload Isolation in MongoDB Deployments</a></li><li class="toctree-l3"><a class="reference internal" href="../../core/zone-sharding.html">Zones</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/manage-shard-zone.html">Manage Shard Zones</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/sharding-segmenting-data-by-location.html">Segmenting Data by Location</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/sharding-tiered-hardware-for-varying-slas.html">Tiered Hardware for Varying SLA or SLO</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/sharding-segmenting-shards.html">Segmenting Data by Application or Customer</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/sharding-high-availability-writes.html">Distributed Local Writes for Insert Only Workloads</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/manage-shard-zone.html">Manage Shard Zones</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/backups.html">MongoDB Backup Methods</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/backup-with-filesystem-snapshots.html">Back Up and Restore with Filesystem Snapshots</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/backup-and-restore-tools.html">Back Up and Restore with MongoDB Tools</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/restore-replica-set-from-backup.html">Restore a Replica Set from MongoDB Backups</a></li><li class="toctree-l3"><a class="reference internal" href="../../administration/backup-sharded-clusters.html">Backup and Restore Sharded Clusters</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/backup-sharded-cluster-with-filesystem-snapshots.html">Back Up a Sharded Cluster with File System Snapshots</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/backup-sharded-cluster-with-database-dumps.html">Back Up a Sharded Cluster with Database Dumps</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/schedule-backup-window-for-sharded-clusters.html">Schedule Backup Window for Sharded Clusters</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/restore-sharded-cluster.html">Restore a Sharded Cluster</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/recover-data-following-unexpected-shutdown.html">Recover a Standalone after an Unexpected Shutdown</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../administration/monitoring.html">Monitoring for MongoDB</a><ul><li class="toctree-l3"><a class="reference internal" href="../../administration/free-monitoring.html">Free Monitoring</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/monitor-with-snmp.html">Monitor MongoDB With SNMP on Linux</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/monitor-with-snmp-on-windows.html">Monitor MongoDB Windows with SNMP</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/troubleshoot-snmp.html">Troubleshoot SNMP</a></li></ul></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../storage.html">Storage</a><ul><li class="toctree-l2"><a class="reference internal" href="../../core/storage-engines.html">Storage Engines</a><ul><li class="toctree-l3"><a class="reference internal" href="../../core/wiredtiger.html">WiredTiger Storage Engine</a><ul><li class="toctree-l4"><a class="reference internal" href="../../tutorial/change-standalone-wiredtiger.html">Change Standalone to WiredTiger</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/change-replica-set-wiredtiger.html">Change Replica Set to WiredTiger</a></li><li class="toctree-l4"><a class="reference internal" href="../../tutorial/change-sharded-cluster-wiredtiger.html">Change Sharded Cluster to WiredTiger</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../core/inmemory.html">In-Memory Storage Engine</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/journaling.html">Journaling</a><ul><li class="toctree-l3"><a class="reference internal" href="../../tutorial/manage-journaling.html">Manage Journaling</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../core/gridfs.html">GridFS</a></li><li class="toctree-l2"><a class="reference internal" href="../../faq/storage.html">FAQ: MongoDB Storage</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../faq.html">Frequently Asked Questions</a><ul><li class="toctree-l2"><a class="reference internal" href="../../faq/fundamentals.html">FAQ: MongoDB Fundamentals</a></li><li class="toctree-l2"><a class="reference internal" href="../../faq/indexes.html">FAQ: Indexes</a></li><li class="toctree-l2"><a class="reference internal" href="../../faq/concurrency.html">FAQ: Concurrency</a></li><li class="toctree-l2"><a class="reference internal" href="../../faq/sharding.html">FAQ: Sharding with MongoDB</a></li><li class="toctree-l2"><a class="reference internal" href="../../faq/replica-sets.html">FAQ: Replication and Replica Sets</a></li><li class="toctree-l2"><a class="reference internal" href="../../faq/storage.html">FAQ: MongoDB Storage</a></li><li class="toctree-l2"><a class="reference internal" href="../../faq/diagnostics.html">FAQ: MongoDB Diagnostics</a></li></ul></li><li class="toctree-l1 current"><a class="reference internal" href="../../reference.html">Reference</a><ul class="current"><li class="toctree-l2"><a class="reference internal" href="../operator.html">Operators</a><ul><li class="toctree-l3"><a class="reference internal" href="../operator/query.html">Query and Projection Operators</a><ul><li class="toctree-l4"><a class="reference internal" href="../operator/query-comparison.html">Comparison Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="../operator/query/eq.html">$eq</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/gt.html">$gt</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/gte.html">$gte</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/in.html">$in</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/lt.html">$lt</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/lte.html">$lte</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/ne.html">$ne</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/nin.html">$nin</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../operator/query-logical.html">Logical Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="../operator/query/and.html">$and</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/not.html">$not</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/nor.html">$nor</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/or.html">$or</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../operator/query-element.html">Element Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="../operator/query/exists.html">$exists</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/type.html">$type</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../operator/query-evaluation.html">Evaluation Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="../operator/query/expr.html">$expr</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/jsonSchema.html">$jsonSchema</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/mod.html">$mod</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/regex.html">$regex</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/text.html">$text</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/where.html">$where</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../operator/query-geospatial.html">Geospatial Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="../operator/query/geoIntersects.html">$geoIntersects</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/geoWithin.html">$geoWithin</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/near.html">$near</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/nearSphere.html">$nearSphere</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/box.html">$box</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/center.html">$center</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/centerSphere.html">$centerSphere</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/geometry.html">$geometry</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/maxDistance.html">$maxDistance</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/minDistance.html">$minDistance</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/polygon.html">$polygon</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/uniqueDocs.html">$uniqueDocs</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../operator/query-array.html">Array Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="../operator/query/all.html">$all</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/elemMatch.html">$elemMatch (query)</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/size.html">$size</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../operator/query-bitwise.html">Bitwise Query Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="../operator/query/bitsAllClear.html">$bitsAllClear</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/bitsAllSet.html">$bitsAllSet</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/bitsAnyClear.html">$bitsAnyClear</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/query/bitsAnySet.html">$bitsAnySet</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../operator/query/comment.html">$comment</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/projection.html">Projection Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="../operator/projection/positional.html">$ (projection)</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/projection/elemMatch.html">$elemMatch (projection)</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/projection/meta.html">$meta</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/projection/slice.html">$slice (projection)</a></li></ul></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../operator/update.html">Update Operators</a><ul><li class="toctree-l4"><a class="reference internal" href="../operator/update-field.html">Field Update Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="../operator/update/currentDate.html">$currentDate</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/inc.html">$inc</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/min.html">$min</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/max.html">$max</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/mul.html">$mul</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/rename.html">$rename</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/set.html">$set</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/setOnInsert.html">$setOnInsert</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/unset.html">$unset</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../operator/update-array.html">Array Update Operators</a><ul><li class="toctree-l5"><a class="reference internal" href="../operator/update/positional.html">$ (update)</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/positional-all.html">$[]</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/positional-filtered.html">$[&lt;identifier&gt;]</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/addToSet.html">$addToSet</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/pop.html">$pop</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/pull.html">$pull</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/push.html">$push</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/pullAll.html">$pullAll</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/each.html">$each</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/position.html">$position</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/slice.html">$slice</a></li><li class="toctree-l5"><a class="reference internal" href="../operator/update/sort.html">$sort</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="../operator/update-bitwise.html">Bitwise Update Operator</a><ul><li class="toctree-l5"><a class="reference internal" href="../operator/update/bit.html">$bit</a></li></ul></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../operator/aggregation-pipeline.html">Aggregation Pipeline Stages</a><ul><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/addFields.html">$addFields (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/bucket.html">$bucket (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/bucketAuto.html">$bucketAuto (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/collStats.html">$collStats (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/count.html">$count (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/currentOp.html">$currentOp (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/facet.html">$facet (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/geoNear.html">$geoNear (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/graphLookup.html">$graphLookup (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/group.html">$group (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/indexStats.html">$indexStats (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/limit.html">$limit (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/listLocalSessions.html">$listLocalSessions</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/listSessions.html">$listSessions</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/lookup.html">$lookup (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/match.html">$match (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/merge.html">$merge (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/out.html">$out (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/planCacheStats.html">$planCacheStats</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/project.html">$project (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/redact.html">$redact (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/replaceRoot.html">$replaceRoot (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/replaceWith.html">$replaceWith (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/sample.html">$sample (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/set.html">$set (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/skip.html">$skip (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/sort.html">$sort (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/sortByCount.html">$sortByCount (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/unset.html">$unset (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/unwind.html">$unwind (aggregation)</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../operator/aggregation.html">Aggregation Pipeline Operators</a><ul><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/abs.html">$abs (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/acos.html">$acos (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/acosh.html">$acosh (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/add.html">$add (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/addToSet.html">$addToSet (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/allElementsTrue.html">$allElementsTrue (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/and.html">$and (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/anyElementTrue.html">$anyElementTrue (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/arrayElemAt.html">$arrayElemAt (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/arrayToObject.html">$arrayToObject (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/asin.html">$asin (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/asinh.html">$asinh (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/atan.html">$atan (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/atan2.html">$atan2 (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/atanh.html">$atanh (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/avg.html">$avg (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/ceil.html">$ceil (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/cmp.html">$cmp (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/concat.html">$concat (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/concatArrays.html">$concatArrays (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/cond.html">$cond (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/convert.html">$convert (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/cos.html">$cos (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/dateFromParts.html">$dateFromParts (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/dateToParts.html">$dateToParts (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/dateFromString.html">$dateFromString (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/dateToString.html">$dateToString (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/dayOfMonth.html">$dayOfMonth (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/dayOfWeek.html">$dayOfWeek (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/dayOfYear.html">$dayOfYear (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/degreesToRadians.html">$degreesToRadians (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/divide.html">$divide (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/eq.html">$eq (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/exp.html">$exp (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/filter.html">$filter (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/first.html">$first (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/floor.html">$floor (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/gt.html">$gt (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/gte.html">$gte (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/hour.html">$hour (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/ifNull.html">$ifNull (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/in.html">$in (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/indexOfArray.html">$indexOfArray (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/indexOfBytes.html">$indexOfBytes (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/indexOfCP.html">$indexOfCP (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/isArray.html">$isArray (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/isoDayOfWeek.html">$isoDayOfWeek (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/isoWeek.html">$isoWeek (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/isoWeekYear.html">$isoWeekYear (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/last.html">$last (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/let.html">$let (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/literal.html">$literal (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/ln.html">$ln (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/log.html">$log (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/log10.html">$log10 (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/lt.html">$lt (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/lte.html">$lte (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/ltrim.html">$ltrim (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/map.html">$map (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/max.html">$max (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/mergeObjects.html">$mergeObjects (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/meta.html">$meta (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/min.html">$min (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/millisecond.html">$millisecond (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/minute.html">$minute (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/mod.html">$mod (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/month.html">$month (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/multiply.html">$multiply (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/ne.html">$ne (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/not.html">$not (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/objectToArray.html">$objectToArray (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/or.html">$or (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/pow.html">$pow (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/push.html">$push (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/radiansToDegrees.html">$radiansToDegrees (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/range.html">$range (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/reduce.html">$reduce (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/regexFind.html">$regexFind (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/regexFindAll.html">$regexFindAll (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/regexMatch.html">$regexMatch (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/reverseArray.html">$reverseArray (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/round.html">$round (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/rtrim.html">$rtrim (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/second.html">$second (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/setDifference.html">$setDifference (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/setEquals.html">$setEquals (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/setIntersection.html">$setIntersection (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/setIsSubset.html">$setIsSubset (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/setUnion.html">$setUnion (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/size.html">$size (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/sin.html">$sin (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/slice.html">$slice (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/split.html">$split (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/sqrt.html">$sqrt (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/stdDevPop.html">$stdDevPop (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/stdDevSamp.html">$stdDevSamp (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/strcasecmp.html">$strcasecmp (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/strLenBytes.html">$strLenBytes (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/strLenCP.html">$strLenCP (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/substr.html">$substr (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/substrBytes.html">$substrBytes (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/substrCP.html">$substrCP (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/subtract.html">$subtract (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/sum.html">$sum (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/switch.html">$switch (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/tan.html">$tan (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/toBool.html">$toBool (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/toDate.html">$toDate (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/toDecimal.html">$toDecimal (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/toDouble.html">$toDouble(aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/toInt.html">$toInt (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/toLong.html">$toLong (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/toObjectId.html">$toObjectId (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/toString.html">$toString (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/toLower.html">$toLower (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/toUpper.html">$toUpper (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/trim.html">$trim (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/trunc.html">$trunc (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/type.html">$type (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/week.html">$week (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/year.html">$year (aggregation)</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/aggregation/zip.html">$zip (aggregation)</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../operator/query-modifier.html">Query Modifiers</a><ul><li class="toctree-l4"><a class="reference internal" href="../operator/meta/comment.html">$comment</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/meta/explain.html">$explain</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/meta/hint.html">$hint</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/meta/max.html">$max</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/meta/maxTimeMS.html">$maxTimeMS</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/meta/min.html">$min</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/meta/orderby.html">$orderby</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/meta/query.html">$query</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/meta/returnKey.html">$returnKey</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/meta/showDiskLoc.html">$showDiskLoc</a></li><li class="toctree-l4"><a class="reference internal" href="../operator/meta/natural.html">$natural</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../command.html">Database Commands</a><ul><li class="toctree-l3"><a class="reference internal" href="../command/nav-aggregation.html">Aggregation Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/aggregate.html">aggregate</a></li><li class="toctree-l4"><a class="reference internal" href="../command/count.html">count</a></li><li class="toctree-l4"><a class="reference internal" href="../command/distinct.html">distinct</a></li><li class="toctree-l4"><a class="reference internal" href="../command/mapReduce.html">mapReduce</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-geospatial.html">Geospatial Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/geoSearch.html">geoSearch</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-crud.html">Query and Write Operation Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/delete.html">delete</a></li><li class="toctree-l4"><a class="reference internal" href="../command/find.html">find</a></li><li class="toctree-l4"><a class="reference internal" href="../command/findAndModify.html">findAndModify</a></li><li class="toctree-l4"><a class="reference internal" href="../command/getLastError.html">getLastError</a></li><li class="toctree-l4"><a class="reference internal" href="../command/getMore.html">getMore</a></li><li class="toctree-l4"><a class="reference internal" href="../command/insert.html">insert</a></li><li class="toctree-l4"><a class="reference internal" href="../command/resetError.html">resetError</a></li><li class="toctree-l4"><a class="reference internal" href="../command/update.html">update</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-plan-cache.html">Query Plan Cache Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/planCacheClear.html">planCacheClear</a></li><li class="toctree-l4"><a class="reference internal" href="../command/planCacheClearFilters.html">planCacheClearFilters</a></li><li class="toctree-l4"><a class="reference internal" href="../command/planCacheListFilters.html">planCacheListFilters</a></li><li class="toctree-l4"><a class="reference internal" href="../command/planCacheListPlans.html">planCacheListPlans</a></li><li class="toctree-l4"><a class="reference internal" href="../command/planCacheListQueryShapes.html">planCacheListQueryShapes</a></li><li class="toctree-l4"><a class="reference internal" href="../command/planCacheSetFilter.html">planCacheSetFilter</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-authentication.html">Authentication Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/authenticate.html">authenticate</a></li><li class="toctree-l4"><a class="reference internal" href="../command/getnonce.html">getnonce</a></li><li class="toctree-l4"><a class="reference internal" href="../command/logout.html">logout</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-user-management.html">User Management Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/createUser.html">createUser</a></li><li class="toctree-l4"><a class="reference internal" href="../command/dropAllUsersFromDatabase.html">dropAllUsersFromDatabase</a></li><li class="toctree-l4"><a class="reference internal" href="../command/dropUser.html">dropUser</a></li><li class="toctree-l4"><a class="reference internal" href="../command/grantRolesToUser.html">grantRolesToUser</a></li><li class="toctree-l4"><a class="reference internal" href="../command/revokeRolesFromUser.html">revokeRolesFromUser</a></li><li class="toctree-l4"><a class="reference internal" href="../command/updateUser.html">updateUser</a></li><li class="toctree-l4"><a class="reference internal" href="../command/usersInfo.html">usersInfo</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-role-management.html">Role Management Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/createRole.html">createRole</a></li><li class="toctree-l4"><a class="reference internal" href="../command/dropRole.html">dropRole</a></li><li class="toctree-l4"><a class="reference internal" href="../command/dropAllRolesFromDatabase.html">dropAllRolesFromDatabase</a></li><li class="toctree-l4"><a class="reference internal" href="../command/grantPrivilegesToRole.html">grantPrivilegesToRole</a></li><li class="toctree-l4"><a class="reference internal" href="../command/grantRolesToRole.html">grantRolesToRole</a></li><li class="toctree-l4"><a class="reference internal" href="../command/invalidateUserCache.html">invalidateUserCache</a></li><li class="toctree-l4"><a class="reference internal" href="../command/revokePrivilegesFromRole.html">revokePrivilegesFromRole</a></li><li class="toctree-l4"><a class="reference internal" href="../command/revokeRolesFromRole.html">revokeRolesFromRole</a></li><li class="toctree-l4"><a class="reference internal" href="../command/rolesInfo.html">rolesInfo</a></li><li class="toctree-l4"><a class="reference internal" href="../command/updateRole.html">updateRole</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-replication.html">Replication Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/applyOps.html">applyOps</a></li><li class="toctree-l4"><a class="reference internal" href="../command/isMaster.html">isMaster</a></li><li class="toctree-l4"><a class="reference internal" href="../command/replSetAbortPrimaryCatchUp.html">replSetAbortPrimaryCatchUp</a></li><li class="toctree-l4"><a class="reference internal" href="../command/replSetFreeze.html">replSetFreeze</a></li><li class="toctree-l4"><a class="reference internal" href="../command/replSetGetConfig.html">replSetGetConfig</a></li><li class="toctree-l4"><a class="reference internal" href="../command/replSetGetStatus.html">replSetGetStatus</a></li><li class="toctree-l4"><a class="reference internal" href="../command/replSetInitiate.html">replSetInitiate</a></li><li class="toctree-l4"><a class="reference internal" href="../command/replSetMaintenance.html">replSetMaintenance</a></li><li class="toctree-l4"><a class="reference internal" href="../command/replSetReconfig.html">replSetReconfig</a></li><li class="toctree-l4"><a class="reference internal" href="../command/replSetResizeOplog.html">replSetResizeOplog</a></li><li class="toctree-l4"><a class="reference internal" href="../command/replSetStepDown.html">replSetStepDown</a></li><li class="toctree-l4"><a class="reference internal" href="../command/replSetSyncFrom.html">replSetSyncFrom</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-sharding.html">Sharding Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/addShard.html">addShard</a></li><li class="toctree-l4"><a class="reference internal" href="../command/addShardToZone.html">addShardToZone</a></li><li class="toctree-l4"><a class="reference internal" href="../command/balancerStart.html">balancerStart</a></li><li class="toctree-l4"><a class="reference internal" href="../command/balancerStatus.html">balancerStatus</a></li><li class="toctree-l4"><a class="reference internal" href="../command/balancerStop.html">balancerStop</a></li><li class="toctree-l4"><a class="reference internal" href="../command/checkShardingIndex.html">checkShardingIndex</a></li><li class="toctree-l4"><a class="reference internal" href="../command/clearJumboFlag.html">clearJumboFlag</a></li><li class="toctree-l4"><a class="reference internal" href="../command/cleanupOrphaned.html">cleanupOrphaned</a></li><li class="toctree-l4"><a class="reference internal" href="../command/enableSharding.html">enableSharding</a></li><li class="toctree-l4"><a class="reference internal" href="../command/flushRouterConfig.html">flushRouterConfig</a></li><li class="toctree-l4"><a class="reference internal" href="../command/getShardMap.html">getShardMap</a></li><li class="toctree-l4"><a class="reference internal" href="../command/getShardVersion.html">getShardVersion</a></li><li class="toctree-l4"><a class="reference internal" href="../command/isdbgrid.html">isdbgrid</a></li><li class="toctree-l4"><a class="reference internal" href="../command/listShards.html">listShards</a></li><li class="toctree-l4"><a class="reference internal" href="../command/medianKey.html">medianKey</a></li><li class="toctree-l4"><a class="reference internal" href="../command/moveChunk.html">moveChunk</a></li><li class="toctree-l4"><a class="reference internal" href="../command/movePrimary.html">movePrimary</a></li><li class="toctree-l4"><a class="reference internal" href="../command/mergeChunks.html">mergeChunks</a></li><li class="toctree-l4"><a class="reference internal" href="../command/removeShard.html">removeShard</a></li><li class="toctree-l4"><a class="reference internal" href="../command/removeShardFromZone.html">removeShardFromZone</a></li><li class="toctree-l4"><a class="reference internal" href="../command/setShardVersion.html">setShardVersion</a></li><li class="toctree-l4"><a class="reference internal" href="../command/shardCollection.html">shardCollection</a></li><li class="toctree-l4"><a class="reference internal" href="../command/shardingState.html">shardingState</a></li><li class="toctree-l4"><a class="reference internal" href="../command/split.html">split</a></li><li class="toctree-l4"><a class="reference internal" href="../command/splitChunk.html">splitChunk</a></li><li class="toctree-l4"><a class="reference internal" href="../command/splitVector.html">splitVector</a></li><li class="toctree-l4"><a class="reference internal" href="../command/unsetSharding.html">unsetSharding</a></li><li class="toctree-l4"><a class="reference internal" href="../command/updateZoneKeyRange.html">updateZoneKeyRange</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-sessions.html">Sessions Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/abortTransaction.html">abortTransaction</a></li><li class="toctree-l4"><a class="reference internal" href="../command/commitTransaction.html">commitTransaction</a></li><li class="toctree-l4"><a class="reference internal" href="../command/endSessions.html">endSessions</a></li><li class="toctree-l4"><a class="reference internal" href="../command/killAllSessions.html">killAllSessions</a></li><li class="toctree-l4"><a class="reference internal" href="../command/killAllSessionsByPattern.html">killAllSessionsByPattern</a></li><li class="toctree-l4"><a class="reference internal" href="../command/killSessions.html">killSessions</a></li><li class="toctree-l4"><a class="reference internal" href="../command/refreshSessions.html">refreshSessions</a></li><li class="toctree-l4"><a class="reference internal" href="../command/startSession.html">startSession</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-administration.html">Administration Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/clean.html">clean</a></li><li class="toctree-l4"><a class="reference internal" href="../command/cloneCollection.html">cloneCollection</a></li><li class="toctree-l4"><a class="reference internal" href="../command/cloneCollectionAsCapped.html">cloneCollectionAsCapped</a></li><li class="toctree-l4"><a class="reference internal" href="../command/collMod.html">collMod</a></li><li class="toctree-l4"><a class="reference internal" href="../command/compact.html">compact</a></li><li class="toctree-l4"><a class="reference internal" href="../command/connPoolSync.html">connPoolSync</a></li><li class="toctree-l4"><a class="reference internal" href="../command/convertToCapped.html">convertToCapped</a></li><li class="toctree-l4"><a class="reference internal" href="../command/create.html">create</a></li><li class="toctree-l4"><a class="reference internal" href="../command/createIndexes.html">createIndexes</a></li><li class="toctree-l4"><a class="reference internal" href="../command/currentOp.html">currentOp</a></li><li class="toctree-l4"><a class="reference internal" href="../command/drop.html">drop</a></li><li class="toctree-l4"><a class="reference internal" href="../command/dropDatabase.html">dropDatabase</a></li><li class="toctree-l4"><a class="reference internal" href="../command/dropConnections.html">dropConnections</a></li><li class="toctree-l4"><a class="reference internal" href="../command/dropIndexes.html">dropIndexes</a></li><li class="toctree-l4"><a class="reference internal" href="../command/filemd5.html">filemd5</a></li><li class="toctree-l4"><a class="reference internal" href="../command/fsync.html">fsync</a></li><li class="toctree-l4"><a class="reference internal" href="../command/fsyncUnlock.html">fsyncUnlock</a></li><li class="toctree-l4"><a class="reference internal" href="../command/getParameter.html">getParameter</a></li><li class="toctree-l4"><a class="reference internal" href="../command/killCursors.html">killCursors</a></li><li class="toctree-l4"><a class="reference internal" href="../command/killOp.html">killOp</a></li><li class="toctree-l4"><a class="reference internal" href="../command/listCollections.html">listCollections</a></li><li class="toctree-l4"><a class="reference internal" href="../command/listDatabases.html">listDatabases</a></li><li class="toctree-l4"><a class="reference internal" href="../command/listIndexes.html">listIndexes</a></li><li class="toctree-l4"><a class="reference internal" href="../command/logRotate.html">logRotate</a></li><li class="toctree-l4"><a class="reference internal" href="../command/reIndex.html">reIndex</a></li><li class="toctree-l4"><a class="reference internal" href="../command/renameCollection.html">renameCollection</a></li><li class="toctree-l4"><a class="reference internal" href="../command/setFeatureCompatibilityVersion.html">setFeatureCompatibilityVersion</a></li><li class="toctree-l4"><a class="reference internal" href="../command/setParameter.html">setParameter</a></li><li class="toctree-l4"><a class="reference internal" href="../command/shutdown.html">shutdown</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-diagnostic.html">Diagnostic Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/availableQueryOptions.html">availableQueryOptions</a></li><li class="toctree-l4"><a class="reference internal" href="../command/buildInfo.html">buildInfo</a></li><li class="toctree-l4"><a class="reference internal" href="../command/collStats.html">collStats</a></li><li class="toctree-l4"><a class="reference internal" href="../command/connPoolStats.html">connPoolStats</a></li><li class="toctree-l4"><a class="reference internal" href="../command/connectionStatus.html">connectionStatus</a></li><li class="toctree-l4"><a class="reference internal" href="../command/cursorInfo.html">cursorInfo</a></li><li class="toctree-l4"><a class="reference internal" href="../command/dataSize.html">dataSize</a></li><li class="toctree-l4"><a class="reference internal" href="../command/dbHash.html">dbHash</a></li><li class="toctree-l4"><a class="reference internal" href="../command/dbStats.html">dbStats</a></li><li class="toctree-l4"><a class="reference internal" href="../command/diagLogging.html">diagLogging</a></li><li class="toctree-l4"><a class="reference internal" href="../command/driverOIDTest.html">driverOIDTest</a></li><li class="toctree-l4"><a class="reference internal" href="../command/explain.html">explain</a></li><li class="toctree-l4"><a class="reference internal" href="../command/features.html">features</a></li><li class="toctree-l4"><a class="reference internal" href="../command/getCmdLineOpts.html">getCmdLineOpts</a></li><li class="toctree-l4"><a class="reference internal" href="../command/getLog.html">getLog</a></li><li class="toctree-l4"><a class="reference internal" href="../command/hostInfo.html">hostInfo</a></li><li class="toctree-l4"><a class="reference internal" href="../command/isSelf.html">isSelf</a></li><li class="toctree-l4"><a class="reference internal" href="../command/listCommands.html">listCommands</a></li><li class="toctree-l4"><a class="reference internal" href="../command/netstat.html">netstat</a></li><li class="toctree-l4"><a class="reference internal" href="../command/ping.html">ping</a></li><li class="toctree-l4"><a class="reference internal" href="../command/profile.html">profile</a></li><li class="toctree-l4"><a class="reference internal" href="../command/serverStatus.html">serverStatus</a></li><li class="toctree-l4"><a class="reference internal" href="../command/shardConnPoolStats.html">shardConnPoolStats</a></li><li class="toctree-l4"><a class="reference internal" href="../command/top.html">top</a></li><li class="toctree-l4"><a class="reference internal" href="../command/validate.html">validate</a></li><li class="toctree-l4"><a class="reference internal" href="../command/whatsmyuri.html">whatsmyuri</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-free-monitoring.html">Free Monitoring Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/getFreeMonitoringStatus.html">getFreeMonitoringStatus</a></li><li class="toctree-l4"><a class="reference internal" href="../command/setFreeMonitoring.html">setFreeMonitoring</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../command/nav-auditing.html">System Events Auditing Commands</a><ul><li class="toctree-l4"><a class="reference internal" href="../command/logApplicationMessage.html">logApplicationMessage</a></li></ul></li></ul></li><li class="toctree-l2 current"><a class="reference internal" href="../method.html"><code class="docutils literal"><span class="pre">mongo</span></code> Shell Methods</a><ul class="current"><li class="toctree-l3 current"><a class="reference internal" href="js-collection.html">Collection Methods</a><ul class="current"><li class="toctree-l4"><a class="reference internal" href="db.collection.aggregate.html">db.collection.aggregate()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.bulkWrite.html">db.collection.bulkWrite()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.copyTo.html">db.collection.copyTo()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.count.html">db.collection.count()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.countDocuments.html">db.collection.countDocuments()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.estimatedDocumentCount.html">db.collection.estimatedDocumentCount()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.createIndex.html">db.collection.createIndex()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.createIndexes.html">db.collection.createIndexes()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.dataSize.html">db.collection.dataSize()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.deleteOne.html">db.collection.deleteOne()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.deleteMany.html">db.collection.deleteMany()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.distinct.html">db.collection.distinct()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.drop.html">db.collection.drop()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.dropIndex.html">db.collection.dropIndex()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.dropIndexes.html">db.collection.dropIndexes()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.ensureIndex.html">db.collection.ensureIndex()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.explain.html">db.collection.explain()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.find.html">db.collection.find()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.findAndModify.html">db.collection.findAndModify()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.findOne.html">db.collection.findOne()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.findOneAndDelete.html">db.collection.findOneAndDelete()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.findOneAndReplace.html">db.collection.findOneAndReplace()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.findOneAndUpdate.html">db.collection.findOneAndUpdate()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.getIndexes.html">db.collection.getIndexes()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.getShardDistribution.html">db.collection.getShardDistribution()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.getShardVersion.html">db.collection.getShardVersion()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.insert.html">db.collection.insert()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.insertOne.html">db.collection.insertOne()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.insertMany.html">db.collection.insertMany()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.isCapped.html">db.collection.isCapped()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.latencyStats.html">db.collection.latencyStats()</a></li><li class="toctree-l4 current"><a class="reference internal current" href="">db.collection.mapReduce()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.reIndex.html">db.collection.reIndex()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.remove.html">db.collection.remove()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.renameCollection.html">db.collection.renameCollection()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.replaceOne.html">db.collection.replaceOne()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.save.html">db.collection.save()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.stats.html">db.collection.stats()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.storageSize.html">db.collection.storageSize()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.totalIndexSize.html">db.collection.totalIndexSize()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.totalSize.html">db.collection.totalSize()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.update.html">db.collection.update()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.updateOne.html">db.collection.updateOne()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.updateMany.html">db.collection.updateMany()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.watch.html">db.collection.watch()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.validate.html">db.collection.validate()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-cursor.html">Cursor Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="cursor.addOption.html">cursor.addOption()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.allowPartialResults.html">cursor.allowPartialResults()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.batchSize.html">cursor.batchSize()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.close.html">cursor.close()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.isClosed.html">cursor.isClosed()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.collation.html">cursor.collation()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.comment.html">cursor.comment()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.count.html">cursor.count()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.explain.html">cursor.explain()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.forEach.html">cursor.forEach()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.hasNext.html">cursor.hasNext()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.hint.html">cursor.hint()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.isExhausted.html">cursor.isExhausted()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.itcount.html">cursor.itcount()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.limit.html">cursor.limit()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.map.html">cursor.map()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.max.html">cursor.max()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.maxTimeMS.html">cursor.maxTimeMS()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.min.html">cursor.min()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.next.html">cursor.next()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.noCursorTimeout.html">cursor.noCursorTimeout()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.objsLeftInBatch.html">cursor.objsLeftInBatch()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.pretty.html">cursor.pretty()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.readConcern.html">cursor.readConcern()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.readPref.html">cursor.readPref()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.returnKey.html">cursor.returnKey()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.showRecordId.html">cursor.showRecordId()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.size.html">cursor.size()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.skip.html">cursor.skip()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.sort.html">cursor.sort()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.tailable.html">cursor.tailable()</a></li><li class="toctree-l4"><a class="reference internal" href="cursor.toArray.html">cursor.toArray()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-database.html">Database Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="db.adminCommand.html">db.adminCommand()</a></li><li class="toctree-l4"><a class="reference internal" href="db.aggregate.html">db.aggregate()</a></li><li class="toctree-l4"><a class="reference internal" href="db.cloneCollection.html">db.cloneCollection()</a></li><li class="toctree-l4"><a class="reference internal" href="db.cloneDatabase.html">db.cloneDatabase()</a></li><li class="toctree-l4"><a class="reference internal" href="db.commandHelp.html">db.commandHelp()</a></li><li class="toctree-l4"><a class="reference internal" href="db.copyDatabase.html">db.copyDatabase()</a></li><li class="toctree-l4"><a class="reference internal" href="db.createCollection.html">db.createCollection()</a></li><li class="toctree-l4"><a class="reference internal" href="db.createView.html">db.createView()</a></li><li class="toctree-l4"><a class="reference internal" href="db.currentOp.html">db.currentOp()</a></li><li class="toctree-l4"><a class="reference internal" href="db.dropDatabase.html">db.dropDatabase()</a></li><li class="toctree-l4"><a class="reference internal" href="db.eval.html">db.eval()</a></li><li class="toctree-l4"><a class="reference internal" href="db.fsyncLock.html">db.fsyncLock()</a></li><li class="toctree-l4"><a class="reference internal" href="db.fsyncUnlock.html">db.fsyncUnlock()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getCollection.html">db.getCollection()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getCollectionInfos.html">db.getCollectionInfos()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getCollectionNames.html">db.getCollectionNames()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getLastError.html">db.getLastError()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getLastErrorObj.html">db.getLastErrorObj()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getLogComponents.html">db.getLogComponents()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getMongo.html">db.getMongo()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getName.html">db.getName()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getProfilingLevel.html">db.getProfilingLevel()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getProfilingStatus.html">db.getProfilingStatus()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getReplicationInfo.html">db.getReplicationInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getSiblingDB.html">db.getSiblingDB()</a></li><li class="toctree-l4"><a class="reference internal" href="db.help.html">db.help()</a></li><li class="toctree-l4"><a class="reference internal" href="db.hostInfo.html">db.hostInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="db.isMaster.html">db.isMaster()</a></li><li class="toctree-l4"><a class="reference internal" href="db.killOp.html">db.killOp()</a></li><li class="toctree-l4"><a class="reference internal" href="db.listCommands.html">db.listCommands()</a></li><li class="toctree-l4"><a class="reference internal" href="db.logout.html">db.logout()</a></li><li class="toctree-l4"><a class="reference internal" href="db.printCollectionStats.html">db.printCollectionStats()</a></li><li class="toctree-l4"><a class="reference internal" href="db.printReplicationInfo.html">db.printReplicationInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="db.printShardingStatus.html">db.printShardingStatus()</a></li><li class="toctree-l4"><a class="reference internal" href="db.printSlaveReplicationInfo.html">db.printSlaveReplicationInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="db.resetError.html">db.resetError()</a></li><li class="toctree-l4"><a class="reference internal" href="db.runCommand.html">db.runCommand()</a></li><li class="toctree-l4"><a class="reference internal" href="db.serverBuildInfo.html">db.serverBuildInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="db.serverCmdLineOpts.html">db.serverCmdLineOpts()</a></li><li class="toctree-l4"><a class="reference internal" href="db.serverStatus.html">db.serverStatus()</a></li><li class="toctree-l4"><a class="reference internal" href="db.setLogLevel.html">db.setLogLevel()</a></li><li class="toctree-l4"><a class="reference internal" href="db.setProfilingLevel.html">db.setProfilingLevel()</a></li><li class="toctree-l4"><a class="reference internal" href="db.shutdownServer.html">db.shutdownServer()</a></li><li class="toctree-l4"><a class="reference internal" href="db.stats.html">db.stats()</a></li><li class="toctree-l4"><a class="reference internal" href="db.version.html">db.version()</a></li><li class="toctree-l4"><a class="reference internal" href="db.watch.html">db.watch()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-plan-cache.html">Query Plan Cache Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="db.collection.getPlanCache.html">db.collection.getPlanCache()</a></li><li class="toctree-l4"><a class="reference internal" href="PlanCache.clear.html">PlanCache.clear()</a></li><li class="toctree-l4"><a class="reference internal" href="PlanCache.clearPlansByQuery.html">PlanCache.clearPlansByQuery()</a></li><li class="toctree-l4"><a class="reference internal" href="PlanCache.getPlansByQuery.html">PlanCache.getPlansByQuery()</a></li><li class="toctree-l4"><a class="reference internal" href="PlanCache.help.html">PlanCache.help()</a></li><li class="toctree-l4"><a class="reference internal" href="PlanCache.listQueryShapes.html">PlanCache.listQueryShapes()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-bulk.html">Bulk Operation Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="db.collection.initializeOrderedBulkOp.html">db.collection.initializeOrderedBulkOp()</a></li><li class="toctree-l4"><a class="reference internal" href="db.collection.initializeUnorderedBulkOp.html">db.collection.initializeUnorderedBulkOp()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.html">Bulk()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.execute.html">Bulk.execute()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.find.html">Bulk.find()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.find.arrayFilters.html">Bulk.find.arrayFilters()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.find.collation.html">Bulk.find.collation()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.find.hint.html">Bulk.find.hint()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.find.remove.html">Bulk.find.remove()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.find.removeOne.html">Bulk.find.removeOne()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.find.replaceOne.html">Bulk.find.replaceOne()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.find.updateOne.html">Bulk.find.updateOne()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.find.update.html">Bulk.find.update()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.find.upsert.html">Bulk.find.upsert()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.getOperations.html">Bulk.getOperations()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.insert.html">Bulk.insert()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.tojson.html">Bulk.tojson()</a></li><li class="toctree-l4"><a class="reference internal" href="Bulk.toString.html">Bulk.toString()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-user-management.html">User Management Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="db.auth.html">db.auth()</a></li><li class="toctree-l4"><a class="reference internal" href="db.changeUserPassword.html">db.changeUserPassword()</a></li><li class="toctree-l4"><a class="reference internal" href="db.createUser.html">db.createUser()</a></li><li class="toctree-l4"><a class="reference internal" href="db.dropUser.html">db.dropUser()</a></li><li class="toctree-l4"><a class="reference internal" href="db.dropAllUsers.html">db.dropAllUsers()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getUser.html">db.getUser()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getUsers.html">db.getUsers()</a></li><li class="toctree-l4"><a class="reference internal" href="db.grantRolesToUser.html">db.grantRolesToUser()</a></li><li class="toctree-l4"><a class="reference internal" href="db.removeUser.html">db.removeUser()</a></li><li class="toctree-l4"><a class="reference internal" href="db.revokeRolesFromUser.html">db.revokeRolesFromUser()</a></li><li class="toctree-l4"><a class="reference internal" href="db.updateUser.html">db.updateUser()</a></li><li class="toctree-l4"><a class="reference internal" href="passwordPrompt.html">passwordPrompt()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-role-management.html">Role Management Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="db.createRole.html">db.createRole()</a></li><li class="toctree-l4"><a class="reference internal" href="db.dropRole.html">db.dropRole()</a></li><li class="toctree-l4"><a class="reference internal" href="db.dropAllRoles.html">db.dropAllRoles()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getRole.html">db.getRole()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getRoles.html">db.getRoles()</a></li><li class="toctree-l4"><a class="reference internal" href="db.grantPrivilegesToRole.html">db.grantPrivilegesToRole()</a></li><li class="toctree-l4"><a class="reference internal" href="db.revokePrivilegesFromRole.html">db.revokePrivilegesFromRole()</a></li><li class="toctree-l4"><a class="reference internal" href="db.grantRolesToRole.html">db.grantRolesToRole()</a></li><li class="toctree-l4"><a class="reference internal" href="db.revokeRolesFromRole.html">db.revokeRolesFromRole()</a></li><li class="toctree-l4"><a class="reference internal" href="db.updateRole.html">db.updateRole()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-replication.html">Replication Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="rs.add.html">rs.add()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.addArb.html">rs.addArb()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.conf.html">rs.conf()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.freeze.html">rs.freeze()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.help.html">rs.help()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.initiate.html">rs.initiate()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.printReplicationInfo.html">rs.printReplicationInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.printSlaveReplicationInfo.html">rs.printSlaveReplicationInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.reconfig.html">rs.reconfig()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.remove.html">rs.remove()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.slaveOk.html">rs.slaveOk()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.status.html">rs.status()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.stepDown.html">rs.stepDown()</a></li><li class="toctree-l4"><a class="reference internal" href="rs.syncFrom.html">rs.syncFrom()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-sharding.html">Sharding Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="sh.addShard.html">sh.addShard()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.addShardTag.html">sh.addShardTag()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.addShardToZone.html">sh.addShardToZone()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.addTagRange.html">sh.addTagRange()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.disableBalancing.html">sh.disableBalancing()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.enableBalancing.html">sh.enableBalancing()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.disableAutoSplit.html">sh.disableAutoSplit</a></li><li class="toctree-l4"><a class="reference internal" href="sh.enableAutoSplit.html">sh.enableAutoSplit</a></li><li class="toctree-l4"><a class="reference internal" href="sh.enableSharding.html">sh.enableSharding()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.getBalancerHost.html">sh.getBalancerHost()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.getBalancerState.html">sh.getBalancerState()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.removeTagRange.html">sh.removeTagRange()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.removeRangeFromZone.html">sh.removeRangeFromZone()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.help.html">sh.help()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.isBalancerRunning.html">sh.isBalancerRunning()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.moveChunk.html">sh.moveChunk()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.removeShardTag.html">sh.removeShardTag()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.removeShardFromZone.html">sh.removeShardFromZone()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.setBalancerState.html">sh.setBalancerState()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.shardCollection.html">sh.shardCollection()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.splitAt.html">sh.splitAt()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.splitFind.html">sh.splitFind()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.startBalancer.html">sh.startBalancer()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.status.html">sh.status()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.stopBalancer.html">sh.stopBalancer()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.waitForBalancer.html">sh.waitForBalancer()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.waitForBalancerOff.html">sh.waitForBalancerOff()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.waitForPingChange.html">sh.waitForPingChange()</a></li><li class="toctree-l4"><a class="reference internal" href="sh.updateZoneKeyRange.html">sh.updateZoneKeyRange()</a></li><li class="toctree-l4"><a class="reference internal" href="convertShardKeyToHashed.html">convertShardKeyToHashed</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-free-monitoring.html">Free Monitoring Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="db.disableFreeMonitoring.html">db.disableFreeMonitoring()</a></li><li class="toctree-l4"><a class="reference internal" href="db.enableFreeMonitoring.html">db.enableFreeMonitoring()</a></li><li class="toctree-l4"><a class="reference internal" href="db.getFreeMonitoringStatus.html">db.getFreeMonitoringStatus</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-constructor.html">Object Constructors and Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="BulkWriteResult.html">BulkWriteResult()</a></li><li class="toctree-l4"><a class="reference internal" href="Date.html">Date()</a></li><li class="toctree-l4"><a class="reference internal" href="ObjectId.html">ObjectId</a></li><li class="toctree-l4"><a class="reference internal" href="ObjectId.getTimestamp.html">ObjectId.getTimestamp()</a></li><li class="toctree-l4"><a class="reference internal" href="ObjectId.toString.html">ObjectId.toString()</a></li><li class="toctree-l4"><a class="reference internal" href="ObjectId.valueOf.html">ObjectId.valueOf()</a></li><li class="toctree-l4"><a class="reference internal" href="UUID.html">UUID()</a></li><li class="toctree-l4"><a class="reference internal" href="WriteResult.html">WriteResult()</a></li><li class="toctree-l4"><a class="reference internal" href="WriteResult.hasWriteError.html">WriteResult.hasWriteError()</a></li><li class="toctree-l4"><a class="reference internal" href="WriteResult.hasWriteConcernError.html">WriteResult.hasWriteConcernError()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-connection.html">Connection Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="connect.html">connect()</a></li><li class="toctree-l4"><a class="reference internal" href="Mongo.html">Mongo()</a></li><li class="toctree-l4"><a class="reference internal" href="Mongo.getDB.html">Mongo.getDB()</a></li><li class="toctree-l4"><a class="reference internal" href="Mongo.getReadPrefMode.html">Mongo.getReadPrefMode()</a></li><li class="toctree-l4"><a class="reference internal" href="Mongo.getReadPrefTagSet.html">Mongo.getReadPrefTagSet()</a></li><li class="toctree-l4"><a class="reference internal" href="Mongo.isCausalConsistency.html">Mongo.isCausalConsistency()</a></li><li class="toctree-l4"><a class="reference internal" href="Mongo.setCausalConsistency.html">Mongo.setCausalConsistency()</a></li><li class="toctree-l4"><a class="reference internal" href="Mongo.setReadPref.html">Mongo.setReadPref()</a></li><li class="toctree-l4"><a class="reference internal" href="Mongo.setSlaveOk.html">Mongo.setSlaveOk()</a></li><li class="toctree-l4"><a class="reference internal" href="Mongo.startSession.html">Mongo.startSession()</a></li><li class="toctree-l4"><a class="reference internal" href="Mongo.watch.html">Mongo.watch()</a></li><li class="toctree-l4"><a class="reference internal" href="Session.html">Session</a><ul><li class="toctree-l5"><a class="reference internal" href="Session.abortTransaction.html">Session.abortTransaction()</a></li><li class="toctree-l5"><a class="reference internal" href="Session.commitTransaction.html">Session.commitTransaction()</a></li><li class="toctree-l5"><a class="reference internal" href="Session.startTransaction.html">Session.startTransaction()</a></li></ul></li><li class="toctree-l4"><a class="reference internal" href="SessionOptions.html">SessionOptions</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-native.html">Native Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="cat.html">cat()</a></li><li class="toctree-l4"><a class="reference internal" href="cd.html">cd()</a></li><li class="toctree-l4"><a class="reference internal" href="copyDbpath.html">copyDbpath()</a></li><li class="toctree-l4"><a class="reference internal" href="getHostName.html">getHostName()</a></li><li class="toctree-l4"><a class="reference internal" href="getMemInfo.html">getMemInfo()</a></li><li class="toctree-l4"><a class="reference internal" href="hostname.html">hostname()</a></li><li class="toctree-l4"><a class="reference internal" href="isInteractive.html">isInteractive()</a></li><li class="toctree-l4"><a class="reference internal" href="listFiles.html">listFiles()</a></li><li class="toctree-l4"><a class="reference internal" href="load.html">load()</a></li><li class="toctree-l4"><a class="reference internal" href="ls.html">ls()</a></li><li class="toctree-l4"><a class="reference internal" href="md5sumFile.html">md5sumFile()</a></li><li class="toctree-l4"><a class="reference internal" href="mkdir.html">mkdir()</a></li><li class="toctree-l4"><a class="reference internal" href="pwd.html">pwd()</a></li><li class="toctree-l4"><a class="reference internal" href="quit.html">quit()</a></li><li class="toctree-l4"><a class="reference internal" href="removeFile.html">removeFile()</a></li><li class="toctree-l4"><a class="reference internal" href="resetDbpath.html">resetDbpath()</a></li><li class="toctree-l4"><a class="reference internal" href="sleep.html">sleep()</a></li><li class="toctree-l4"><a class="reference internal" href="setVerboseShell.html">setVerboseShell()</a></li><li class="toctree-l4"><a class="reference internal" href="version.html">version()</a></li><li class="toctree-l4"><a class="reference internal" href="isWindows.html">_isWindows()</a></li><li class="toctree-l4"><a class="reference internal" href="rand.html">_rand()</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="js-client-side-field-level-encryption.html">Client-Side Field Level Encryption Methods</a><ul><li class="toctree-l4"><a class="reference internal" href="getKeyVault.html">getKeyVault()</a></li><li class="toctree-l4"><a class="reference internal" href="KeyVault.createKey.html">KeyVault.createKey()</a></li><li class="toctree-l4"><a class="reference internal" href="KeyVault.deleteKey.html">KeyVault.deleteKey()</a></li><li class="toctree-l4"><a class="reference internal" href="KeyVault.getKey.html">KeyVault.getKey()</a></li><li class="toctree-l4"><a class="reference internal" href="KeyVault.getKeys.html">KeyVault.getKeys()</a></li><li class="toctree-l4"><a class="reference internal" href="KeyVault.addKeyAlternateName.html">KeyVault.addKeyAlternateName()</a></li><li class="toctree-l4"><a class="reference internal" href="KeyVault.removeKeyAlternateName.html">KeyVault.removeKeyAlternateName()</a></li><li class="toctree-l4"><a class="reference internal" href="KeyVault.getKeyByAltName.html">KeyVault.getKeyByAltName()</a></li><li class="toctree-l4"><a class="reference internal" href="getClientEncryption.html">getClientEncryption()</a></li><li class="toctree-l4"><a class="reference internal" href="ClientEncryption.encrypt.html">ClientEncryption.encrypt()</a></li><li class="toctree-l4"><a class="reference internal" href="ClientEncryption.decrypt.html">ClientEncryption.decrypt()</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../program.html">MongoDB Package Components</a><ul><li class="toctree-l3"><a class="reference internal" href="../program/mongod.html"><code class="docutils literal"><span class="pre">mongod</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongos.html"><code class="docutils literal"><span class="pre">mongos</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongo.html"><code class="docutils literal"><span class="pre">mongo</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongod.exe.html"><code class="docutils literal"><span class="pre">mongod.exe</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongos.exe.html"><code class="docutils literal"><span class="pre">mongos.exe</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongodump.html"><code class="docutils literal"><span class="pre">mongodump</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongorestore.html"><code class="docutils literal"><span class="pre">mongorestore</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/bsondump.html"><code class="docutils literal"><span class="pre">bsondump</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongoimport.html"><code class="docutils literal"><span class="pre">mongoimport</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongoexport.html"><code class="docutils literal"><span class="pre">mongoexport</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongostat.html"><code class="docutils literal"><span class="pre">mongostat</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongotop.html"><code class="docutils literal"><span class="pre">mongotop</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongoreplay.html"><code class="docutils literal"><span class="pre">mongoreplay</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongoldap.html"><code class="docutils literal"><span class="pre">mongoldap</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/mongofiles.html"><code class="docutils literal"><span class="pre">mongofiles</span></code></a></li><li class="toctree-l3"><a class="reference internal" href="../program/install_compass.html"><code class="docutils literal"><span class="pre">install_compass</span></code></a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../configuration-options.html">Configuration File Options</a><ul><li class="toctree-l3"><a class="reference internal" href="../expansion-directives.html">Externally Sourced Configuration File Values</a></li><li class="toctree-l3"><a class="reference internal" href="../../tutorial/convert-command-line-options-to-yaml.html">Convert Command-Line Options to YAML</a></li><li class="toctree-l3"><a class="reference internal" href="../configuration-file-settings-command-line-options-mapping.html">Configuration File Settings and Command-Line Options Mapping</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../parameters.html">MongoDB Server Parameters</a></li><li class="toctree-l2"><a class="reference internal" href="../limits.html">MongoDB Limits and Thresholds</a></li><li class="toctree-l2"><a class="reference internal" href="../explain-results.html">Explain Results</a></li><li class="toctree-l2"><a class="reference internal" href="../system-collections.html">System Collections</a></li><li class="toctree-l2"><a class="reference internal" href="../connection-string.html">Connection String URI Format</a></li><li class="toctree-l2"><a class="reference internal" href="../collation.html">Collation</a><ul><li class="toctree-l3"><a class="reference internal" href="../collation-locales-defaults.html">Collation Locales and Default Parameters</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../mongodb-wire-protocol.html">MongoDB Wire Protocol</a></li><li class="toctree-l2"><a class="reference internal" href="../log-messages.html">Log Messages</a></li><li class="toctree-l2"><a class="reference internal" href="../exit-codes.html">Exit Codes and Statuses</a></li><li class="toctree-l2"><a class="reference internal" href="../glossary.html">Glossary</a></li><li class="toctree-l2"><a class="reference internal" href="../default-mongodb-port.html">Default MongoDB Port</a></li><li class="toctree-l2"><a class="reference internal" href="../server-sessions.html">Server Sessions</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../release-notes.html">Release Notes</a><ul><li class="toctree-l2"><a class="reference internal" href="../../release-notes/4.2.html">Release Notes for MongoDB 4.2</a><ul><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.2-compatibility.html">Compatibility Changes in MongoDB 4.2</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.2-upgrade-standalone.html">Upgrade a Standalone to 4.2</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.2-upgrade-replica-set.html">Upgrade a Replica Set to 4.2</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.2-upgrade-sharded-cluster.html">Upgrade a Sharded Cluster to 4.2</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.2-downgrade.html">Downgrade 4.2 to 4.0</a><ul><li class="toctree-l4"><a class="reference internal" href="../../release-notes/4.2-downgrade-standalone.html">Downgrade 4.2 Standalone to 4.0</a></li><li class="toctree-l4"><a class="reference internal" href="../../release-notes/4.2-downgrade-replica-set.html">Downgrade 4.2 Replica Set to 4.0</a></li><li class="toctree-l4"><a class="reference internal" href="../../release-notes/4.2-downgrade-sharded-cluster.html">Downgrade 4.2 Sharded Cluster to 4.0</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.2-changelog.html">4.2 Changelog</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/4.0.html">Release Notes for MongoDB 4.0</a><ul><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.0-compatibility.html">Compatibility Changes in MongoDB 4.0</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.0-upgrade-standalone.html">Upgrade a Standalone to 4.0</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.0-upgrade-replica-set.html">Upgrade a Replica Set to 4.0</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.0-upgrade-sharded-cluster.html">Upgrade a Sharded Cluster to 4.0</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.0-downgrade-standalone.html">Downgrade 4.0 Standalone to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.0-downgrade-replica-set.html">Downgrade 4.0 Replica Set to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.0-downgrade-sharded-cluster.html">Downgrade 4.0 Sharded Cluster to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/4.0-changelog.html">4.0 Changelog</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/3.6.html">Release Notes for MongoDB 3.6</a><ul><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.6-changelog.html">3.6 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.6-compatibility.html">Compatibility Changes in MongoDB 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.6-upgrade-standalone.html">Upgrade a Standalone to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.6-upgrade-replica-set.html">Upgrade a Replica Set to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.6-upgrade-sharded-cluster.html">Upgrade a Sharded Cluster to 3.6</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.6-downgrade-standalone.html">Downgrade 3.6 Standalone to 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.6-downgrade-replica-set.html">Downgrade 3.6 Replica Set to 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.6-downgrade-sharded-cluster.html">Downgrade 3.6 Sharded Cluster to 3.4</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/3.4.html">Release Notes for MongoDB 3.4</a><ul><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.4-changelog.html">3.4 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.4-compatibility.html">Compatibility Changes in MongoDB 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.4-upgrade-standalone.html">Upgrade a Standalone to 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.4-upgrade-replica-set.html">Upgrade a Replica Set to 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.4-upgrade-sharded-cluster.html">Upgrade a Sharded Cluster to 3.4</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.4-downgrade.html">Downgrade MongoDB 3.4 to 3.2</a><ul><li class="toctree-l4"><a class="reference internal" href="../../release-notes/3.4-downgrade-standalone.html">Downgrade 3.4 Standalone to 3.2</a></li><li class="toctree-l4"><a class="reference internal" href="../../release-notes/3.4-downgrade-replica-set.html">Downgrade 3.4 Replica Set to 3.2</a></li><li class="toctree-l4"><a class="reference internal" href="../../release-notes/3.4-downgrade-sharded-cluster.html">Downgrade 3.4 Sharded Cluster to 3.2</a></li></ul></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/3.2.html">Release Notes for MongoDB 3.2</a><ul><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.2-changelog.html">3.2 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.2-compatibility.html">Compatibility Changes in MongoDB 3.2</a><ul><li class="toctree-l4"><a class="reference internal" href="../../release-notes/3.2-javascript.html">JavaScript Changes in MongoDB 3.2</a></li></ul></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.2-upgrade.html">Upgrade MongoDB to 3.2</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.2-downgrade.html">Downgrade MongoDB from 3.2</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/3.0.html">Release Notes for MongoDB 3.0</a><ul><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.0-changelog.html">3.0 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.0-compatibility.html">Compatibility Changes in MongoDB 3.0</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.0-upgrade.html">Upgrade MongoDB to 3.0</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.0-scram.html">Upgrade to SCRAM</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/3.0-downgrade.html">Downgrade MongoDB from 3.0</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/2.6.html">Release Notes for MongoDB 2.6</a><ul><li class="toctree-l3"><a class="reference internal" href="../../release-notes/2.6-changelog.html">2.6 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/2.6-compatibility.html">Compatibility Changes in MongoDB 2.6</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/2.6-upgrade.html">Upgrade MongoDB to 2.6</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/2.6-upgrade-authorization.html">Upgrade User Authorization Data to 2.6 Format</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/2.6-downgrade.html">Downgrade MongoDB from 2.6</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/2.4.html">Release Notes for MongoDB 2.4</a><ul><li class="toctree-l3"><a class="reference internal" href="../../release-notes/2.4-changelog.html">2.4 Changelog</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/2.4-javascript.html">JavaScript Changes in MongoDB 2.4</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/2.4-upgrade.html">Upgrade MongoDB to 2.4</a></li><li class="toctree-l3"><a class="reference internal" href="../../release-notes/2.4-index-types.html">Compatibility and Index Type Changes in MongoDB 2.4</a></li></ul></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/2.2.html">Release Notes for MongoDB 2.2</a></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/2.0.html">Release Notes for MongoDB 2.0</a></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/1.8.html">Release Notes for MongoDB 1.8</a></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/1.6.html">Release Notes for MongoDB 1.6</a></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/1.4.html">Release Notes for MongoDB 1.4</a></li><li class="toctree-l2"><a class="reference internal" href="../../release-notes/1.2.html">Release Notes for MongoDB 1.2.x</a></li><li class="toctree-l2"><a class="reference internal" href="../versioning.html">MongoDB Versioning</a></li></ul></li><li class="toctree-l1"><a class="reference internal" href="../../support.html">Technical Support</a></li></ul>


    </div>
  </div>
           
         </aside>

   </div>

    <div id="main-column" class="main-column">

    <span id="showNav" class="showNav">Navigation</span>

      
        <div class="document">
            <div class="documentwrapper"><div class="bodywrapper">
              <div class="body" data-pagename="reference/method/db.collection.mapReduce">
                   <a class="edit-link" href="https://github.com/mongodb/docs/blob/v4.2/source/reference/method/db.collection.mapReduce.txt" target="_blank" title="Edit reference/method/db.collection.mapReduce.txt on GitHub">
    
      <span class="icon-edit"></span>
    
  </a>
                

                
  <div class="bc">
    
      <ul>
          <li><a href="../../reference.html">Reference</a><span class="bcpoint"> > </span></li>
            
          <li><a href="../method.html"><code class="docutils literal"><span class="pre">mongo</span></code> Shell Methods</a><span class="bcpoint"> > </span></li>
            
          <li><a href="js-collection.html">Collection Methods</a><span class="bcpoint"> > </span></li>
            <li>db.collection.mapReduce()</li> 
      </ul>
    
    
  </div>
                
                  <div class="section" id="db-collection-mapreduce">
<h1>db.collection.mapReduce()<a class="headerlink" href="#db-collection-mapreduce" title="Permalink to this headline">¶</a></h1>
<div class="contents singlecol local topic" id="on-this-page">
<p class="topic-title first">On this page</p>
<ul class="simple">
<li><a class="reference internal" href="#requirements-for-the-map-function" id="id2">Requirements for the <code class="docutils literal"><span class="pre">map</span></code> Function</a></li>
<li><a class="reference internal" href="#requirements-for-the-reduce-function" id="id3">Requirements for the <code class="docutils literal"><span class="pre">reduce</span></code> Function</a></li>
<li><a class="reference internal" href="#out-options" id="id4"><code class="docutils literal"><span class="pre">out</span></code> Options</a></li>
<li><a class="reference internal" href="#requirements-for-the-finalize-function" id="id5">Requirements for the <code class="docutils literal"><span class="pre">finalize</span></code> Function</a></li>
<li><a class="reference internal" href="#map-reduce-examples" id="id6">Map-Reduce Examples</a></li>
<li><a class="reference internal" href="#output" id="id7">Output</a></li>
<li><a class="reference internal" href="#restrictions" id="id8">Restrictions</a></li>
<li><a class="reference internal" href="#additional-information" id="id9">Additional Information</a></li>
</ul>
</div>
<dl class="method">
<dt id="db.collection.mapReduce">
<code class="descclassname">db.collection.</code><code class="descname">mapReduce</code><span class="sig-paren">(</span><em>map</em>, <em>reduce</em>, <em>{&lt;out&gt;</em>, <em>&lt;query&gt;</em>, <em>&lt;sort&gt;</em>, <em>&lt;limit&gt;</em>, <em>&lt;finalize&gt;</em>, <em>&lt;scope&gt;</em>, <em>&lt;jsMode&gt;</em>, <em>&lt;verbose&gt;}</em><span class="sig-paren">)</span><a class="headerlink" href="#db.collection.mapReduce" title="Permalink to this definition">¶</a></dt>
<dd><div class="important admonition">
<p class="first admonition-title"><code class="docutils literal"><span class="pre">mongo</span></code> Shell Method</p>
<p class="last">This page documents the <a class="reference internal" href="../program/mongo.html#bin.mongo" title="bin.mongo"><code class="xref mongodb mongodb-binary docutils literal"><span class="pre">mongo</span></code></a> shell method, and does
<em>not</em> refer to the MongoDB Node.js driver (or any other driver)
method. For corresponding MongoDB driver API, refer to your specific
<a class="reference external" href="https://docs.mongodb.com/ecosystem/drivers">MongoDB driver</a> documentation instead.</p>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p>Starting in version 4.2, MongoDB deprecates:</p>
<ul class="last simple">
<li>The map-reduce option to <em>create</em> a new sharded collection as well
as the use of the <a class="reference internal" href="../command/mapReduce.html#mapreduce-out-cmd"><span class="std std-ref">sharded</span></a> option for
map-reduce. To output to a sharded collection, create the sharded
collection first. MongoDB 4.2 also deprecates the replacement of
an existing sharded collection.</li>
<li>The explicit specification of <a class="reference internal" href="../command/mapReduce.html#mapreduce-out-cmd"><span class="std std-ref">nonAtomic: false</span></a> option.</li>
</ul>
</div>
<p>The <a class="reference internal" href="#db.collection.mapReduce" title="db.collection.mapReduce()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.mapReduce()</span></code></a> method provides a wrapper
around the <a class="reference internal" href="../command/mapReduce.html#dbcmd.mapReduce" title="mapReduce"><code class="xref mongodb mongodb-dbcommand docutils literal"><span class="pre">mapReduce</span></code></a> command.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><a class="reference internal" href="../../core/views.html"><span class="doc">Views</span></a> do not support map-reduce operations.</p>
</div>
<p><a class="reference internal" href="#db.collection.mapReduce" title="db.collection.mapReduce()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.mapReduce()</span></code></a> has the following syntax:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">db</span><span class="p">.</span><span class="nx">collection</span><span class="p">.</span><span class="nx">mapReduce</span><span class="p">(</span>
                         <span class="o">&lt;</span><span class="nx">map</span><span class="o">&gt;</span><span class="p">,</span>
                         <span class="o">&lt;</span><span class="nx">reduce</span><span class="o">&gt;</span><span class="p">,</span>
                         <span class="p">{</span>
                           <span class="nx">out</span><span class="o">:</span> <span class="o">&lt;</span><span class="nx">collection</span><span class="o">&gt;</span><span class="p">,</span>
                           <span class="nx">query</span><span class="o">:</span> <span class="o">&lt;</span><span class="nb">document</span><span class="o">&gt;</span><span class="p">,</span>
                           <span class="nx">sort</span><span class="o">:</span> <span class="o">&lt;</span><span class="nb">document</span><span class="o">&gt;</span><span class="p">,</span>
                           <span class="nx">limit</span><span class="o">:</span> <span class="o">&lt;</span><span class="nx">number</span><span class="o">&gt;</span><span class="p">,</span>
                           <span class="nx">finalize</span><span class="o">:</span> <span class="o">&lt;</span><span class="kd">function</span><span class="o">&gt;</span><span class="p">,</span>
                           <span class="nx">scope</span><span class="o">:</span> <span class="o">&lt;</span><span class="nb">document</span><span class="o">&gt;</span><span class="p">,</span>
                           <span class="nx">jsMode</span><span class="o">:</span> <span class="o">&lt;</span><span class="kr">boolean</span><span class="o">&gt;</span><span class="p">,</span>
                           <span class="nx">verbose</span><span class="o">:</span> <span class="o">&lt;</span><span class="kr">boolean</span><span class="o">&gt;</span><span class="p">,</span>
                           <span class="nx">bypassDocumentValidation</span><span class="o">:</span> <span class="o">&lt;</span><span class="kr">boolean</span><span class="o">&gt;</span>
                         <span class="p">}</span>
                       <span class="p">)</span>
</pre></div>
</div>
</div>
<p><a class="reference internal" href="#db.collection.mapReduce" title="db.collection.mapReduce()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.mapReduce()</span></code></a> takes the following parameters:</p>
<table border="1" class="colwidths-given docutils">
<colgroup>
<col width="17%" />
<col width="17%" />
<col width="67%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Parameter</th>
<th class="head">Type</th>
<th class="head">Description</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td><code class="docutils literal"><span class="pre">map</span></code></td>
<td>function</td>
<td><p class="first">A JavaScript function that associates or “maps” a <code class="docutils literal"><span class="pre">value</span></code> with a
<code class="docutils literal"><span class="pre">key</span></code> and emits the <code class="docutils literal"><span class="pre">key</span></code> and value <code class="docutils literal"><span class="pre">pair</span></code>.</p>
<p class="last">See <a class="reference internal" href="#mapreduce-map-mtd"><span class="std std-ref">Requirements for the map Function</span></a> for more information.</p>
</td>
</tr>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">reduce</span></code></td>
<td>function</td>
<td><p class="first">A JavaScript function that “reduces” to a single object all the
<code class="docutils literal"><span class="pre">values</span></code> associated with a particular <code class="docutils literal"><span class="pre">key</span></code>.</p>
<p class="last">See <a class="reference internal" href="#mapreduce-reduce-mtd"><span class="std std-ref">Requirements for the reduce Function</span></a> for more information.</p>
</td>
</tr>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">options</span></code></td>
<td>document</td>
<td>A document that specifies additional parameters to
<a class="reference internal" href="#db.collection.mapReduce" title="db.collection.mapReduce()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.mapReduce()</span></code></a>.</td>
</tr>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">bypassDocumentValidation</span></code></td>
<td>boolean</td>
<td><p class="first">Optional. Enables <a class="reference internal" href="../command/mapReduce.html#dbcmd.mapReduce" title="mapReduce"><code class="xref mongodb mongodb-dbcommand docutils literal"><span class="pre">mapReduce</span></code></a> to bypass document validation
during the operation. This lets you insert documents that do not
meet the validation requirements.</p>
<div class="last versionadded">
<p><span class="versionmodified">New in version 3.2.</span></p>
</div>
</td>
</tr>
</tbody>
</table>
<p>The following table describes additional arguments that
<a class="reference internal" href="#db.collection.mapReduce" title="db.collection.mapReduce()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.mapReduce()</span></code></a> can accept.</p>
<table border="1" class="colwidths-given docutils">
<colgroup>
<col width="17%" />
<col width="17%" />
<col width="67%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Field</th>
<th class="head">Type</th>
<th class="head">Description</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td><code class="docutils literal"><span class="pre">out</span></code></td>
<td>string or document</td>
<td><p class="first">Specifies the location of the result of the map-reduce operation.
You can output to a collection, output to a collection with an
action, or output inline. You may output to a collection when
performing map-reduce operations on the primary members of the set;
on <a class="reference internal" href="../glossary.html#term-secondary"><span class="xref std std-term">secondary</span></a> members you may only use the <code class="docutils literal"><span class="pre">inline</span></code> output.</p>
<p class="last">See <a class="reference internal" href="#mapreduce-out-mtd"><span class="std std-ref">out Options</span></a> for more information.</p>
</td>
</tr>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">query</span></code></td>
<td>document</td>
<td>Specifies the selection criteria using <a class="reference internal" href="../operator.html"><span class="doc">query operators</span></a> for determining the documents input to the
<code class="docutils literal"><span class="pre">map</span></code> function.</td>
</tr>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">sort</span></code></td>
<td>document</td>
<td>Sorts the <em>input</em> documents. This option is useful for
optimization. For example, specify the sort key to be the same as
the emit key so that there are fewer reduce operations. The sort key
must be in an existing index for this collection.</td>
</tr>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">limit</span></code></td>
<td>number</td>
<td>Specifies a maximum number of documents for the input into the
<code class="docutils literal"><span class="pre">map</span></code> function.</td>
</tr>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">finalize</span></code></td>
<td>function</td>
<td><p class="first">Optional. Follows the <code class="docutils literal"><span class="pre">reduce</span></code> method and modifies the output.</p>
<p class="last">See <a class="reference internal" href="#mapreduce-finalize-mtd"><span class="std std-ref">Requirements for the finalize Function</span></a> for more information.</p>
</td>
</tr>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">scope</span></code></td>
<td>document</td>
<td>Specifies global variables that are accessible in the <code class="docutils literal"><span class="pre">map</span></code>,
<code class="docutils literal"><span class="pre">reduce</span></code> and <code class="docutils literal"><span class="pre">finalize</span></code> functions.</td>
</tr>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">jsMode</span></code></td>
<td>boolean</td>
<td><p class="first">Specifies whether to convert intermediate data into BSON
format between the execution of the <code class="docutils literal"><span class="pre">map</span></code> and <code class="docutils literal"><span class="pre">reduce</span></code>
functions.</p>
<p>Defaults to <code class="docutils literal"><span class="pre">false</span></code>.</p>
<p>If <code class="docutils literal"><span class="pre">false</span></code>:</p>
<ul class="simple">
<li>Internally, MongoDB converts the JavaScript objects emitted
by the <code class="docutils literal"><span class="pre">map</span></code>
function to BSON objects. These BSON
objects are then converted back to JavaScript objects when
calling the <code class="docutils literal"><span class="pre">reduce</span></code> function.</li>
<li>The map-reduce operation places the intermediate BSON objects
in temporary, on-disk storage. This allows the map-reduce
operation to execute over arbitrarily large data sets.</li>
</ul>
<p>If <code class="docutils literal"><span class="pre">true</span></code>:</p>
<ul class="last simple">
<li>Internally, the JavaScript objects emitted during <code class="docutils literal"><span class="pre">map</span></code>
function remain as JavaScript objects. There is no need to
convert the objects for the <code class="docutils literal"><span class="pre">reduce</span></code> function, which
can result in faster execution.</li>
<li>You can only use <code class="docutils literal"><span class="pre">jsMode</span></code> for result sets with fewer than
500,000 distinct <code class="docutils literal"><span class="pre">key</span></code> arguments to the mapper’s <code class="docutils literal"><span class="pre">emit()</span></code>
function.</li>
</ul>
</td>
</tr>
<tr class="row-odd"><td><code class="docutils literal"><span class="pre">verbose</span></code></td>
<td>boolean</td>
<td><p class="first">Specifies whether to include the <code class="docutils literal"><span class="pre">timing</span></code> information in the
result information. Set <code class="docutils literal"><span class="pre">verbose</span></code> to <code class="docutils literal"><span class="pre">true</span></code> to include
the <code class="docutils literal"><span class="pre">timing</span></code> information.</p>
<p class="last">Defaults to <code class="docutils literal"><span class="pre">false</span></code>.</p>
</td>
</tr>
<tr class="row-even"><td><code class="docutils literal"><span class="pre">collation</span></code></td>
<td>document</td>
<td><p class="first">Optional.</p>
<p>Specifies the <a class="reference internal" href="../bson-type-comparison-order.html#collation"><span class="std std-ref">collation</span></a>  to use for the operation.</p>
<p><a class="reference internal" href="../collation.html"><span class="doc">Collation</span></a> allows users to specify
language-specific rules for string comparison, such as rules for
lettercase and accent marks.</p>
<p>The collation option has the following syntax:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">collation</span><span class="o">:</span> <span class="p">{</span>
   <span class="nx">locale</span><span class="o">:</span> <span class="o">&lt;</span><span class="nx">string</span><span class="o">&gt;</span><span class="p">,</span>
   <span class="nx">caseLevel</span><span class="o">:</span> <span class="o">&lt;</span><span class="kr">boolean</span><span class="o">&gt;</span><span class="p">,</span>
   <span class="nx">caseFirst</span><span class="o">:</span> <span class="o">&lt;</span><span class="nx">string</span><span class="o">&gt;</span><span class="p">,</span>
   <span class="nx">strength</span><span class="o">:</span> <span class="o">&lt;</span><span class="kr">int</span><span class="o">&gt;</span><span class="p">,</span>
   <span class="nx">numericOrdering</span><span class="o">:</span> <span class="o">&lt;</span><span class="kr">boolean</span><span class="o">&gt;</span><span class="p">,</span>
   <span class="nx">alternate</span><span class="o">:</span> <span class="o">&lt;</span><span class="nx">string</span><span class="o">&gt;</span><span class="p">,</span>
   <span class="nx">maxVariable</span><span class="o">:</span> <span class="o">&lt;</span><span class="nx">string</span><span class="o">&gt;</span><span class="p">,</span>
   <span class="nx">backwards</span><span class="o">:</span> <span class="o">&lt;</span><span class="kr">boolean</span><span class="o">&gt;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<p>When specifying collation, the <code class="docutils literal"><span class="pre">locale</span></code> field is mandatory; all
other collation fields are optional. For descriptions of the fields,
see <a class="reference internal" href="../collation.html#collation-document-fields"><span class="std std-ref">Collation Document</span></a>.</p>
<p>If the collation is unspecified but the collection has a
default collation (see <a class="reference internal" href="db.createCollection.html#db.createCollection" title="db.createCollection()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.createCollection()</span></code></a>), the
operation uses the collation specified for the collection.</p>
<p>If no collation is specified for the collection or for the
operations, MongoDB uses the simple binary comparison used in prior
versions for string comparisons.</p>
<p>You cannot specify multiple collations for an operation. For
example, you cannot specify different collations per field, or if
performing a find with a sort, you cannot use one collation for the
find and another for the sort.</p>
<div class="last versionadded">
<p><span class="versionmodified">New in version 3.4.</span></p>
</div>
</td>
</tr>
</tbody>
</table>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p><a class="reference internal" href="../command/mapReduce.html#dbcmd.mapReduce" title="mapReduce"><code class="xref mongodb mongodb-dbcommand docutils literal"><span class="pre">map-reduce</span> <span class="pre">operations</span></code></a> and <a class="reference internal" href="../operator/query/where.html#op._S_where" title="$where"><code class="xref mongodb mongodb-query docutils literal"><span class="pre">$where</span></code></a>
operator expressions <strong>cannot</strong> access certain global functions or
properties, such as <code class="docutils literal"><span class="pre">db</span></code>, that are available in the
<a class="reference internal" href="../program/mongo.html#bin.mongo" title="bin.mongo"><code class="xref mongodb mongodb-binary docutils literal"><span class="pre">mongo</span></code></a> shell.</p>
<p>The following JavaScript functions and properties <strong>are available</strong> to
<a class="reference internal" href="../command/mapReduce.html#dbcmd.mapReduce" title="mapReduce"><code class="xref mongodb mongodb-dbcommand docutils literal"><span class="pre">map-reduce</span> <span class="pre">operations</span></code></a> and <a class="reference internal" href="../operator/query/where.html#op._S_where" title="$where"><code class="xref mongodb mongodb-query docutils literal"><span class="pre">$where</span></code></a>
operator expressions:</p>
<table border="1" class="last docutils">
<colgroup>
<col width="33%" />
<col width="33%" />
<col width="33%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Available Properties</th>
<th class="head">Available Functions</th>
<th class="head">&#160;</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td><div class="first last line-block">
<div class="line"><code class="docutils literal"><span class="pre">args</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">MaxKey</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">MinKey</span></code></div>
</div>
</td>
<td><div class="first last line-block">
<div class="line"><code class="docutils literal"><span class="pre">assert()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">BinData()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">DBPointer()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">DBRef()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">doassert()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">emit()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">gc()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">HexData()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">hex_md5()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">isNumber()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">isObject()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">ISODate()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">isString()</span></code></div>
</div>
</td>
<td><div class="first last line-block">
<div class="line"><code class="docutils literal"><span class="pre">Map()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">MD5()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">NumberInt()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">NumberLong()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">ObjectId()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">print()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">printjson()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">printjsononeline()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">sleep()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">Timestamp()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">tojson()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">tojsononeline()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">tojsonObject()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">UUID()</span></code></div>
<div class="line"><code class="docutils literal"><span class="pre">version()</span></code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</dd></dl>

<div class="section" id="requirements-for-the-map-function">
<span id="mapreduce-map-mtd"></span><h2>Requirements for the <code class="docutils literal"><span class="pre">map</span></code> Function<a class="headerlink" href="#requirements-for-the-map-function" title="Permalink to this headline">¶</a></h2>
<p>The <code class="docutils literal"><span class="pre">map</span></code> function is responsible for transforming each input document into
zero or more documents. It can access the variables defined in the <code class="docutils literal"><span class="pre">scope</span></code>
parameter, and has the following prototype:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
   <span class="p">...</span>
   <span class="nx">emit</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">value</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<p>The <code class="docutils literal"><span class="pre">map</span></code> function has the following requirements:</p>
<ul class="simple">
<li>In the <code class="docutils literal"><span class="pre">map</span></code> function, reference the current document as <code class="docutils literal"><span class="pre">this</span></code>
within the function.</li>
<li>The <code class="docutils literal"><span class="pre">map</span></code> function should <em>not</em> access the database for any reason.</li>
<li>The <code class="docutils literal"><span class="pre">map</span></code> function should be pure, or have <em>no</em> impact outside of
the function (i.e. side effects.)</li>
<li>A single emit can only hold half of MongoDB’s <a class="reference internal" href="../limits.html#limit-bson-document-size"><span class="std std-ref">maximum BSON
document size</span></a>.</li>
<li>The <code class="docutils literal"><span class="pre">map</span></code> function may optionally call <code class="docutils literal"><span class="pre">emit(key,value)</span></code> any number of
times to create an output document associating <code class="docutils literal"><span class="pre">key</span></code> with <code class="docutils literal"><span class="pre">value</span></code>.</li>
<li>Starting in version 4.2.1, MongoDB deprecates the use of JavaScript
with scope (i.e. <a class="reference internal" href="../bson-types.html"><span class="doc">BSON type 15</span></a>) for
the <code class="docutils literal"><span class="pre">map</span></code> function. To scope variables, use the <code class="docutils literal"><span class="pre">scope</span></code> parameter
instead.</li>
</ul>
<p>The following <code class="docutils literal"><span class="pre">map</span></code> function will call <code class="docutils literal"><span class="pre">emit(key,value)</span></code> either
0 or 1 times depending on the value of the input document’s
<code class="docutils literal"><span class="pre">status</span></code> field:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
    <span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">status</span> <span class="o">==</span> <span class="s1">&#39;A&#39;</span><span class="p">)</span>
        <span class="nx">emit</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">cust_id</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<p>The following <code class="docutils literal"><span class="pre">map</span></code> function may call <code class="docutils literal"><span class="pre">emit(key,value)</span></code>
multiple times depending on the number of elements in the input
document’s <code class="docutils literal"><span class="pre">items</span></code> field:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
    <span class="k">this</span><span class="p">.</span><span class="nx">items</span><span class="p">.</span><span class="nx">forEach</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">item</span><span class="p">){</span> <span class="nx">emit</span><span class="p">(</span><span class="nx">item</span><span class="p">.</span><span class="nx">sku</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="p">});</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="requirements-for-the-reduce-function">
<span id="mapreduce-reduce-mtd"></span><h2>Requirements for the <code class="docutils literal"><span class="pre">reduce</span></code> Function<a class="headerlink" href="#requirements-for-the-reduce-function" title="Permalink to this headline">¶</a></h2>
<p>The <code class="docutils literal"><span class="pre">reduce</span></code> function has the following prototype:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">values</span><span class="p">)</span> <span class="p">{</span>
   <span class="p">...</span>
   <span class="k">return</span> <span class="nx">result</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<p>The <code class="docutils literal"><span class="pre">reduce</span></code> function exhibits the following behaviors:</p>
<ul class="simple">
<li>The <code class="docutils literal"><span class="pre">reduce</span></code> function should <em>not</em> access the database,
even to perform read operations.</li>
<li>The <code class="docutils literal"><span class="pre">reduce</span></code> function should <em>not</em> affect the outside
system.</li>
<li>MongoDB will <strong>not</strong> call the <code class="docutils literal"><span class="pre">reduce</span></code> function for a key
that has only a single value. The <code class="docutils literal"><span class="pre">values</span></code> argument is an array
whose elements are the <code class="docutils literal"><span class="pre">value</span></code> objects that are “mapped” to the
<code class="docutils literal"><span class="pre">key</span></code>.</li>
<li>MongoDB can invoke the <code class="docutils literal"><span class="pre">reduce</span></code> function more than once for the
same key. In this case, the previous output from the <code class="docutils literal"><span class="pre">reduce</span></code>
function for that key will become one of the input values to the next
<code class="docutils literal"><span class="pre">reduce</span></code> function invocation for that key.</li>
<li>The <code class="docutils literal"><span class="pre">reduce</span></code> function can access the variables defined
in the <code class="docutils literal"><span class="pre">scope</span></code> parameter.</li>
<li>The inputs to <code class="docutils literal"><span class="pre">reduce</span></code> must not be larger than half of MongoDB’s
<a class="reference internal" href="../limits.html#limit-bson-document-size"><span class="std std-ref">maximum BSON document size</span></a>. This
requirement may be violated when large documents are returned and then
joined together in subsequent <code class="docutils literal"><span class="pre">reduce</span></code> steps.</li>
<li>Starting in version 4.2.1, MongoDB deprecates the use of JavaScript
with scope (i.e. <a class="reference internal" href="../bson-types.html"><span class="doc">BSON type 15</span></a>) for
the <code class="docutils literal"><span class="pre">reduce</span></code> function. To scope variables, use the <code class="docutils literal"><span class="pre">scope</span></code>
parameter instead.</li>
</ul>
<p>Because it is possible to invoke the <code class="docutils literal"><span class="pre">reduce</span></code> function
more than once for the same key, the following
properties need to be true:</p>
<ul>
<li><p class="first">the <em>type</em> of the return object must be <strong>identical</strong>
to the type of the <code class="docutils literal"><span class="pre">value</span></code> emitted by the <code class="docutils literal"><span class="pre">map</span></code>
function.</p>
</li>
<li><p class="first">the <code class="docutils literal"><span class="pre">reduce</span></code> function must be <em>associative</em>. The following statement must be
true:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">reduce</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="p">[</span> <span class="nx">C</span><span class="p">,</span> <span class="nx">reduce</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="p">[</span> <span class="nx">A</span><span class="p">,</span> <span class="nx">B</span> <span class="p">])</span> <span class="p">]</span> <span class="p">)</span> <span class="o">==</span> <span class="nx">reduce</span><span class="p">(</span> <span class="nx">key</span><span class="p">,</span> <span class="p">[</span> <span class="nx">C</span><span class="p">,</span> <span class="nx">A</span><span class="p">,</span> <span class="nx">B</span> <span class="p">]</span> <span class="p">)</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">the <code class="docutils literal"><span class="pre">reduce</span></code> function must be <em>idempotent</em>. Ensure
that the following statement is true:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">reduce</span><span class="p">(</span> <span class="nx">key</span><span class="p">,</span> <span class="p">[</span> <span class="nx">reduce</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">valuesArray</span><span class="p">)</span> <span class="p">]</span> <span class="p">)</span> <span class="o">==</span> <span class="nx">reduce</span><span class="p">(</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">valuesArray</span> <span class="p">)</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">the <code class="docutils literal"><span class="pre">reduce</span></code> function should be <em>commutative</em>: that is, the order of the
elements in the <code class="docutils literal"><span class="pre">valuesArray</span></code> should not affect the output of the
<code class="docutils literal"><span class="pre">reduce</span></code> function, so that the following statement is true:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">reduce</span><span class="p">(</span> <span class="nx">key</span><span class="p">,</span> <span class="p">[</span> <span class="nx">A</span><span class="p">,</span> <span class="nx">B</span> <span class="p">]</span> <span class="p">)</span> <span class="o">==</span> <span class="nx">reduce</span><span class="p">(</span> <span class="nx">key</span><span class="p">,</span> <span class="p">[</span> <span class="nx">B</span><span class="p">,</span> <span class="nx">A</span> <span class="p">]</span> <span class="p">)</span>
</pre></div>
</div>
</div>
</li>
</ul>
</div>
<div class="section" id="out-options">
<span id="mapreduce-out-mtd"></span><h2><code class="docutils literal"><span class="pre">out</span></code> Options<a class="headerlink" href="#out-options" title="Permalink to this headline">¶</a></h2>
<p>You can specify the following options for the <code class="docutils literal"><span class="pre">out</span></code> parameter:</p>
<div class="section" id="output-to-a-collection">
<h3>Output to a Collection<a class="headerlink" href="#output-to-a-collection" title="Permalink to this headline">¶</a></h3>
<p>This option outputs to a new collection, and is not available on secondary
members of replica sets.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">out</span><span class="o">:</span> <span class="o">&lt;</span><span class="nx">collectionName</span><span class="o">&gt;</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="output-to-a-collection-with-an-action">
<h3>Output to a Collection with an Action<a class="headerlink" href="#output-to-a-collection-with-an-action" title="Permalink to this headline">¶</a></h3>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p>Starting in version 4.2, MongoDB deprecates:</p>
<ul class="last simple">
<li>The map-reduce option to <em>create</em> a new sharded collection as well
as the use of the <a class="reference internal" href="../command/mapReduce.html#mapreduce-out-cmd"><span class="std std-ref">sharded</span></a> option for
map-reduce. To output to a sharded collection, create the sharded
collection first. MongoDB 4.2 also deprecates the replacement of
an existing sharded collection.</li>
<li>The explicit specification of <a class="reference internal" href="../command/mapReduce.html#mapreduce-out-cmd"><span class="std std-ref">nonAtomic: false</span></a> option.</li>
</ul>
</div>
<p>This option is only available when passing a collection that
already exists to <code class="docutils literal"><span class="pre">out</span></code>. It is not available
on secondary members of replica sets.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">out</span><span class="o">:</span> <span class="p">{</span> <span class="o">&lt;</span><span class="nx">action</span><span class="o">&gt;:</span> <span class="o">&lt;</span><span class="nx">collectionName</span><span class="o">&gt;</span>
        <span class="p">[,</span> <span class="nx">db</span><span class="o">:</span> <span class="o">&lt;</span><span class="nx">dbName</span><span class="o">&gt;</span><span class="p">]</span>
        <span class="p">[,</span> <span class="nx">sharded</span><span class="o">:</span> <span class="o">&lt;</span><span class="kr">boolean</span><span class="o">&gt;</span> <span class="p">]</span>
        <span class="p">[,</span> <span class="nx">nonAtomic</span><span class="o">:</span> <span class="o">&lt;</span><span class="kr">boolean</span><span class="o">&gt;</span> <span class="p">]</span> <span class="p">}</span>
</pre></div>
</div>
</div>
<p>When you output to a collection with an action, the <code class="docutils literal"><span class="pre">out</span></code> has the
following parameters:</p>
<ul>
<li><p class="first"><code class="docutils literal"><span class="pre">&lt;action&gt;</span></code>: Specify one of the following actions:</p>
<ul>
<li><p class="first"><code class="docutils literal"><span class="pre">replace</span></code></p>
<p>Replace the contents of the <code class="docutils literal"><span class="pre">&lt;collectionName&gt;</span></code> if the
collection with the <code class="docutils literal"><span class="pre">&lt;collectionName&gt;</span></code> exists.</p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">merge</span></code></p>
<p>Merge the new result with the existing result if the
output collection already exists. If an existing document
has the same key as the new result, <em>overwrite</em> that
existing document.</p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">reduce</span></code></p>
<p>Merge the new result with the existing result if the
output collection already exists. If an existing document
has the same key as the new result, apply the <code class="docutils literal"><span class="pre">reduce</span></code>
function to both the new and the existing documents and
overwrite the existing document with the result.</p>
</li>
</ul>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">db</span></code>:</p>
<p>Optional. The name of the database that you want the map-reduce
operation to write its output. By default this will be the same
database as the input collection.</p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">sharded</span></code>:</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Starting in version 4.2, the use of the <code class="docutils literal"><span class="pre">sharded</span></code> option is
deprecated.</p>
</div>
<p>Optional. If <code class="docutils literal"><span class="pre">true</span></code> <em>and</em> you have enabled sharding on output
database, the map-reduce operation will shard the output collection
using the <code class="docutils literal"><span class="pre">_id</span></code> field as the shard key.</p>
<p>If <code class="docutils literal"><span class="pre">true</span></code> and <code class="docutils literal"><span class="pre">collectionName</span></code> is an existing unsharded collection,
map-reduce fails.</p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">nonAtomic</span></code>:</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Starting in MongoDB 4.2, explicitly setting <code class="docutils literal"><span class="pre">nonAtomic</span></code> to <code class="docutils literal"><span class="pre">false</span></code> is
deprecated.</p>
</div>
<p>Optional. Specify output operation as non-atomic. This applies <strong>only</strong>
to the <code class="docutils literal"><span class="pre">merge</span></code> and <code class="docutils literal"><span class="pre">reduce</span></code> output modes, which may take minutes to
execute.</p>
<p>By default <code class="docutils literal"><span class="pre">nonAtomic</span></code> is <code class="docutils literal"><span class="pre">false</span></code>, and the map-reduce
operation locks the database during post-processing.</p>
<p>If <code class="docutils literal"><span class="pre">nonAtomic</span></code> is <code class="docutils literal"><span class="pre">true</span></code>, the post-processing step prevents
MongoDB from locking the database: during this time, other clients
will be able to read intermediate states of the output collection.</p>
</li>
</ul>
</div>
<div class="section" id="output-inline">
<h3>Output Inline<a class="headerlink" href="#output-inline" title="Permalink to this headline">¶</a></h3>
<p>Perform the map-reduce operation in memory and return the result. This
option is the only available option for <code class="docutils literal"><span class="pre">out</span></code> on secondary members of
replica sets.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">out</span><span class="o">:</span> <span class="p">{</span> <span class="nx">inline</span><span class="o">:</span> <span class="mi">1</span> <span class="p">}</span>
</pre></div>
</div>
</div>
<p>The result must fit within the <a class="reference internal" href="../limits.html#limit-bson-document-size"><span class="std std-ref">maximum size of a BSON document</span></a>.</p>
</div>
</div>
<div class="section" id="requirements-for-the-finalize-function">
<span id="mapreduce-finalize-mtd"></span><h2>Requirements for the <code class="docutils literal"><span class="pre">finalize</span></code> Function<a class="headerlink" href="#requirements-for-the-finalize-function" title="Permalink to this headline">¶</a></h2>
<p>The <code class="docutils literal"><span class="pre">finalize</span></code> function has the following prototype:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">reducedValue</span><span class="p">)</span> <span class="p">{</span>
   <span class="p">...</span>
   <span class="k">return</span> <span class="nx">modifiedObject</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<p>The <code class="docutils literal"><span class="pre">finalize</span></code> function receives as its arguments a <code class="docutils literal"><span class="pre">key</span></code>
value and the <code class="docutils literal"><span class="pre">reducedValue</span></code> from the <code class="docutils literal"><span class="pre">reduce</span></code> function. Be
aware that:</p>
<ul class="simple">
<li>The <code class="docutils literal"><span class="pre">finalize</span></code> function should <em>not</em> access the database for
any reason.</li>
<li>The <code class="docutils literal"><span class="pre">finalize</span></code> function should be pure, or have <em>no</em> impact
outside of the function (i.e. side effects.)</li>
<li>The <code class="docutils literal"><span class="pre">finalize</span></code> function can access the variables defined in
the <code class="docutils literal"><span class="pre">scope</span></code> parameter.</li>
<li>Starting in version 4.2.1, MongoDB deprecates the use of JavaScript
with scope (i.e. <a class="reference internal" href="../bson-types.html"><span class="doc">BSON type 15</span></a>) for
the <code class="docutils literal"><span class="pre">finalize</span></code> function. To scope variables, use the <code class="docutils literal"><span class="pre">scope</span></code>
parameter instead.</li>
</ul>
</div>
<div class="section" id="map-reduce-examples">
<h2>Map-Reduce Examples<a class="headerlink" href="#map-reduce-examples" title="Permalink to this headline">¶</a></h2>
<div class="note admonition">
<p class="first admonition-title">Aggregation Pipeline as Alternative</p>
<p><a class="reference internal" href="../../core/aggregation-pipeline.html"><span class="doc">Aggregation pipeline</span></a>
provides better performance and a more coherent interface than
map-reduce.</p>
<p>Various map-reduce expressions can be
rewritten using <a class="reference internal" href="../../meta/aggregation-quick-reference.html"><span class="doc">aggregation pipeline operators</span></a>, such as <a class="reference internal" href="../operator/aggregation/group.html#pipe._S_group" title="$group"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$group</span></code></a>,
<a class="reference internal" href="../operator/aggregation/merge.html#pipe._S_merge" title="$merge"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$merge</span></code></a>, etc.</p>
<p class="last">The example below includes aggregation pipeline alternatives.</p>
</div>
<p>Create a sample collection <code class="docutils literal"><span class="pre">orders</span></code> with the following documents:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">db</span><span class="p">.</span><span class="nx">orders</span><span class="p">.</span><span class="nx">insertMany</span><span class="p">([</span>
   <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">cust_id</span><span class="o">:</span> <span class="s2">&quot;Ant O. Knee&quot;</span><span class="p">,</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-01&quot;</span><span class="p">),</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">25</span><span class="p">,</span> <span class="nx">items</span><span class="o">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">},</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;apples&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">}</span> <span class="p">],</span> <span class="nx">status</span><span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">cust_id</span><span class="o">:</span> <span class="s2">&quot;Ant O. Knee&quot;</span><span class="p">,</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-08&quot;</span><span class="p">),</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">70</span><span class="p">,</span> <span class="nx">items</span><span class="o">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">8</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">},</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;chocolates&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">10</span> <span class="p">}</span> <span class="p">],</span> <span class="nx">status</span><span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">3</span><span class="p">,</span> <span class="nx">cust_id</span><span class="o">:</span> <span class="s2">&quot;Busby Bee&quot;</span><span class="p">,</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-08&quot;</span><span class="p">),</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">50</span><span class="p">,</span> <span class="nx">items</span><span class="o">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">},</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;pears&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">}</span> <span class="p">],</span> <span class="nx">status</span><span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">4</span><span class="p">,</span> <span class="nx">cust_id</span><span class="o">:</span> <span class="s2">&quot;Busby Bee&quot;</span><span class="p">,</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-18&quot;</span><span class="p">),</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">25</span><span class="p">,</span> <span class="nx">items</span><span class="o">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">}</span> <span class="p">],</span> <span class="nx">status</span><span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="nx">cust_id</span><span class="o">:</span> <span class="s2">&quot;Busby Bee&quot;</span><span class="p">,</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-19&quot;</span><span class="p">),</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">50</span><span class="p">,</span> <span class="nx">items</span><span class="o">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;chocolates&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">10</span> <span class="p">}</span> <span class="p">],</span> <span class="nx">status</span><span class="o">:</span> <span class="s2">&quot;A&quot;</span><span class="p">},</span>
   <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">6</span><span class="p">,</span> <span class="nx">cust_id</span><span class="o">:</span> <span class="s2">&quot;Cam Elot&quot;</span><span class="p">,</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-19&quot;</span><span class="p">),</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">35</span><span class="p">,</span> <span class="nx">items</span><span class="o">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;carrots&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">1.0</span> <span class="p">},</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;apples&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">}</span> <span class="p">],</span> <span class="nx">status</span><span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">7</span><span class="p">,</span> <span class="nx">cust_id</span><span class="o">:</span> <span class="s2">&quot;Cam Elot&quot;</span><span class="p">,</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-20&quot;</span><span class="p">),</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">25</span><span class="p">,</span> <span class="nx">items</span><span class="o">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">}</span> <span class="p">],</span> <span class="nx">status</span><span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">8</span><span class="p">,</span> <span class="nx">cust_id</span><span class="o">:</span> <span class="s2">&quot;Don Quis&quot;</span><span class="p">,</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-20&quot;</span><span class="p">),</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">75</span><span class="p">,</span> <span class="nx">items</span><span class="o">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;chocolates&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">10</span> <span class="p">},</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;apples&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">}</span> <span class="p">],</span> <span class="nx">status</span><span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">9</span><span class="p">,</span> <span class="nx">cust_id</span><span class="o">:</span> <span class="s2">&quot;Don Quis&quot;</span><span class="p">,</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-20&quot;</span><span class="p">),</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">55</span><span class="p">,</span> <span class="nx">items</span><span class="o">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;carrots&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">1.0</span> <span class="p">},</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;apples&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">},</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">}</span> <span class="p">],</span> <span class="nx">status</span><span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nx">cust_id</span><span class="o">:</span> <span class="s2">&quot;Don Quis&quot;</span><span class="p">,</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-23&quot;</span><span class="p">),</span> <span class="nx">price</span><span class="o">:</span> <span class="mi">25</span><span class="p">,</span> <span class="nx">items</span><span class="o">:</span> <span class="p">[</span> <span class="p">{</span> <span class="nx">sku</span><span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nx">price</span><span class="o">:</span> <span class="mf">2.5</span> <span class="p">}</span> <span class="p">],</span> <span class="nx">status</span><span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">}</span>
<span class="p">])</span>
</pre></div>
</div>
</div>
<div class="section" id="return-the-total-price-per-customer">
<h3>Return the Total Price Per Customer<a class="headerlink" href="#return-the-total-price-per-customer" title="Permalink to this headline">¶</a></h3>
<p>Perform the map-reduce operation on the <code class="docutils literal"><span class="pre">orders</span></code> collection to group
by the <code class="docutils literal"><span class="pre">cust_id</span></code>, and calculate the sum of the <code class="docutils literal"><span class="pre">price</span></code> for each
<code class="docutils literal"><span class="pre">cust_id</span></code>:</p>
<ol class="arabic">
<li><p class="first">Define the map function to process each input document:</p>
<ul class="simple">
<li>In the function, <code class="docutils literal"><span class="pre">this</span></code> refers to the document that the
map-reduce operation is processing.</li>
<li>The function maps the <code class="docutils literal"><span class="pre">price</span></code> to the <code class="docutils literal"><span class="pre">cust_id</span></code> for each
document and emits the <code class="docutils literal"><span class="pre">cust_id</span></code> and <code class="docutils literal"><span class="pre">price</span></code> pair.</li>
</ul>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kd">var</span> <span class="nx">mapFunction1</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
   <span class="nx">emit</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">cust_id</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">price</span><span class="p">);</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">Define the corresponding reduce function with two arguments
<code class="docutils literal"><span class="pre">keyCustId</span></code> and <code class="docutils literal"><span class="pre">valuesPrices</span></code>:</p>
<ul class="simple">
<li>The <code class="docutils literal"><span class="pre">valuesPrices</span></code> is an array whose elements are the <code class="docutils literal"><span class="pre">price</span></code>
values emitted by the map function and grouped by <code class="docutils literal"><span class="pre">keyCustId</span></code>.</li>
<li>The function reduces the <code class="docutils literal"><span class="pre">valuesPrice</span></code> array to the
sum of its elements.</li>
</ul>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kd">var</span> <span class="nx">reduceFunction1</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">keyCustId</span><span class="p">,</span> <span class="nx">valuesPrices</span><span class="p">)</span> <span class="p">{</span>
   <span class="k">return</span> <span class="nb">Array</span><span class="p">.</span><span class="nx">sum</span><span class="p">(</span><span class="nx">valuesPrices</span><span class="p">);</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">Perform map-reduce on all documents in the <code class="docutils literal"><span class="pre">orders</span></code> collection
using the <code class="docutils literal"><span class="pre">mapFunction1</span></code> map function and the <code class="docutils literal"><span class="pre">reduceFunction1</span></code>
reduce function.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">db</span><span class="p">.</span><span class="nx">orders</span><span class="p">.</span><span class="nx">mapReduce</span><span class="p">(</span>
   <span class="nx">mapFunction1</span><span class="p">,</span>
   <span class="nx">reduceFunction1</span><span class="p">,</span>
   <span class="p">{</span> <span class="nx">out</span><span class="o">:</span> <span class="s2">&quot;map_reduce_example&quot;</span> <span class="p">}</span>
<span class="p">)</span>
</pre></div>
</div>
</div>
<p>This operation outputs the results to a collection named
<code class="docutils literal"><span class="pre">map_reduce_example</span></code>. If the <code class="docutils literal"><span class="pre">map_reduce_example</span></code> collection
already exists, the operation will replace the contents with the
results of this map-reduce operation.</p>
</li>
<li><p class="first">Query the <code class="docutils literal"><span class="pre">map_reduce_example</span></code> collection to verify the results:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">db</span><span class="p">.</span><span class="nx">map_reduce_example</span><span class="p">.</span><span class="nx">find</span><span class="p">().</span><span class="nx">sort</span><span class="p">(</span> <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">1</span> <span class="p">}</span> <span class="p">)</span>
</pre></div>
</div>
</div>
<p>The operation returns the following documents:</p>
<div class="button-code-block">
<div class="button-row">
</div>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Ant O. Knee&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">95</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Busby Bee&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">125</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Cam Elot&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">60</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Don Quis&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">155</span> <span class="p">}</span>
</pre></div>
</div>
</div>
</li>
</ol>
<div class="section" id="aggregation-alternative">
<h4>Aggregation Alternative<a class="headerlink" href="#aggregation-alternative" title="Permalink to this headline">¶</a></h4>
<div class="docutils container">
<p>Using the available aggregation pipeline operators, you can rewrite
the map-reduce operation without defining custom functions:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">db</span><span class="p">.</span><span class="nx">orders</span><span class="p">.</span><span class="nx">aggregate</span><span class="p">([</span>
   <span class="p">{</span> <span class="nx">$group</span><span class="o">:</span> <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="s2">&quot;$cust_id&quot;</span><span class="p">,</span> <span class="nx">value</span><span class="o">:</span> <span class="p">{</span> <span class="nx">$sum</span><span class="o">:</span> <span class="s2">&quot;$price&quot;</span> <span class="p">}</span> <span class="p">}</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">$out</span><span class="o">:</span> <span class="s2">&quot;agg_alternative_1&quot;</span> <span class="p">}</span>
<span class="p">])</span>
</pre></div>
</div>
</div>
<ol class="arabic">
<li><p class="first">The <a class="reference internal" href="../operator/aggregation/group.html#pipe._S_group" title="$group"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$group</span></code></a> stage groups by the <code class="docutils literal"><span class="pre">cust_id</span></code> and
calculates the <code class="docutils literal"><span class="pre">value</span></code> field (See also <code class="xref mongodb mongodb-expression docutils literal"><span class="pre">$sum</span></code>). The
<code class="docutils literal"><span class="pre">value</span></code> field contains the total <code class="docutils literal"><span class="pre">price</span></code> for each <code class="docutils literal"><span class="pre">cust_id</span></code>.</p>
<p>The stage output the following documents to the next stage:</p>
<div class="button-code-block">
<div class="button-row">
</div>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Don Quis&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">155</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Ant O. Knee&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">95</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Cam Elot&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">60</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Busby Bee&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">125</span> <span class="p">}</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">Then, the <a class="reference internal" href="../operator/aggregation/out.html#pipe._S_out" title="$out"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$out</span></code></a> writes the output to the collection
<code class="docutils literal"><span class="pre">agg_alternative_1</span></code>. Alternatively, you could use
<a class="reference internal" href="../operator/aggregation/merge.html#pipe._S_merge" title="$merge"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$merge</span></code></a> instead of <a class="reference internal" href="../operator/aggregation/out.html#pipe._S_out" title="$out"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$out</span></code></a>.</p>
</li>
<li><p class="first">Query the <code class="docutils literal"><span class="pre">agg_alternative_1</span></code> collection to verify the results:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">db</span><span class="p">.</span><span class="nx">agg_alternative_1</span><span class="p">.</span><span class="nx">find</span><span class="p">().</span><span class="nx">sort</span><span class="p">(</span> <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">1</span> <span class="p">}</span> <span class="p">)</span>
</pre></div>
</div>
</div>
<p>The operation returns the following documents:</p>
<div class="button-code-block">
<div class="button-row">
</div>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Ant O. Knee&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">95</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Busby Bee&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">125</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Cam Elot&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">60</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Don Quis&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="mi">155</span> <span class="p">}</span>
</pre></div>
</div>
</div>
</li>
</ol>
</div>
</div>
</div>
<div class="section" id="calculate-order-and-total-quantity-with-average-quantity-per-item">
<h3>Calculate Order and Total Quantity with Average Quantity Per Item<a class="headerlink" href="#calculate-order-and-total-quantity-with-average-quantity-per-item" title="Permalink to this headline">¶</a></h3>
<p>In this example, you will perform a map-reduce operation on the
<code class="docutils literal"><span class="pre">orders</span></code> collection for all documents that have an <code class="docutils literal"><span class="pre">ord_date</span></code> value
greater than or equal to <code class="docutils literal"><span class="pre">2020-03-01</span></code>. The operation groups by the
<code class="docutils literal"><span class="pre">item.sku</span></code> field, and calculates the number of orders and the total
quantity ordered for each <code class="docutils literal"><span class="pre">sku</span></code>. The operation then calculates the
average quantity per order for each <code class="docutils literal"><span class="pre">sku</span></code> value and merges the
results into the output collection. When merging results, if an
existing document has the same key as the new result, the operation
overwrites the existing document. If there is no existing document with
the same key, the operation inserts the document.</p>
<ol class="arabic">
<li><p class="first">Define the map function to process each input document:</p>
<ul class="simple">
<li>In the function, <code class="docutils literal"><span class="pre">this</span></code> refers to the document that the
map-reduce operation is processing.</li>
<li>For each item, the function associates the <code class="docutils literal"><span class="pre">sku</span></code> with a new
object <code class="docutils literal"><span class="pre">value</span></code> that contains the <code class="docutils literal"><span class="pre">count</span></code> of <code class="docutils literal"><span class="pre">1</span></code> and the
item <code class="docutils literal"><span class="pre">qty</span></code> for the order and emits the <code class="docutils literal"><span class="pre">sku</span></code> and <code class="docutils literal"><span class="pre">value</span></code> pair.</li>
</ul>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span> <span class="kd">var</span> <span class="nx">mapFunction2</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
    <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">idx</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">idx</span> <span class="o">&lt;</span> <span class="k">this</span><span class="p">.</span><span class="nx">items</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">idx</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
       <span class="kd">var</span> <span class="nx">key</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">items</span><span class="p">[</span><span class="nx">idx</span><span class="p">].</span><span class="nx">sku</span><span class="p">;</span>
       <span class="kd">var</span> <span class="nx">value</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">count</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="k">this</span><span class="p">.</span><span class="nx">items</span><span class="p">[</span><span class="nx">idx</span><span class="p">].</span><span class="nx">qty</span> <span class="p">};</span>

       <span class="nx">emit</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">value</span><span class="p">);</span>
    <span class="p">}</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">Define the corresponding reduce function with two arguments
<code class="docutils literal"><span class="pre">keySKU</span></code> and <code class="docutils literal"><span class="pre">countObjVals</span></code>:</p>
<ul class="simple">
<li><code class="docutils literal"><span class="pre">countObjVals</span></code> is an array whose elements are the objects
mapped to the grouped <code class="docutils literal"><span class="pre">keySKU</span></code> values passed by map
function to the reducer function.</li>
<li>The function reduces the <code class="docutils literal"><span class="pre">countObjVals</span></code> array to a single
object <code class="docutils literal"><span class="pre">reducedValue</span></code> that contains the <code class="docutils literal"><span class="pre">count</span></code> and the
<code class="docutils literal"><span class="pre">qty</span></code> fields.</li>
<li>In <code class="docutils literal"><span class="pre">reducedVal</span></code>, the <code class="docutils literal"><span class="pre">count</span></code> field contains the sum of the
<code class="docutils literal"><span class="pre">count</span></code> fields from the individual array elements, and the
<code class="docutils literal"><span class="pre">qty</span></code> field contains the sum of the <code class="docutils literal"><span class="pre">qty</span></code> fields from the
individual array elements.</li>
</ul>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kd">var</span> <span class="nx">reduceFunction2</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">keySKU</span><span class="p">,</span> <span class="nx">countObjVals</span><span class="p">)</span> <span class="p">{</span>
   <span class="nx">reducedVal</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">count</span><span class="o">:</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="mi">0</span> <span class="p">};</span>

   <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">idx</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">idx</span> <span class="o">&lt;</span> <span class="nx">countObjVals</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">idx</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
       <span class="nx">reducedVal</span><span class="p">.</span><span class="nx">count</span> <span class="o">+=</span> <span class="nx">countObjVals</span><span class="p">[</span><span class="nx">idx</span><span class="p">].</span><span class="nx">count</span><span class="p">;</span>
       <span class="nx">reducedVal</span><span class="p">.</span><span class="nx">qty</span> <span class="o">+=</span> <span class="nx">countObjVals</span><span class="p">[</span><span class="nx">idx</span><span class="p">].</span><span class="nx">qty</span><span class="p">;</span>
   <span class="p">}</span>

   <span class="k">return</span> <span class="nx">reducedVal</span><span class="p">;</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">Define a finalize function with two arguments <code class="docutils literal"><span class="pre">key</span></code> and
<code class="docutils literal"><span class="pre">reducedVal</span></code>. The function modifies the <code class="docutils literal"><span class="pre">reducedVal</span></code> object
to add a computed field named <code class="docutils literal"><span class="pre">avg</span></code> and returns the modified
object:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="kd">var</span> <span class="nx">finalizeFunction2</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">reducedVal</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">reducedVal</span><span class="p">.</span><span class="nx">avg</span> <span class="o">=</span> <span class="nx">reducedVal</span><span class="p">.</span><span class="nx">qty</span><span class="o">/</span><span class="nx">reducedVal</span><span class="p">.</span><span class="nx">count</span><span class="p">;</span>
  <span class="k">return</span> <span class="nx">reducedVal</span><span class="p">;</span>
<span class="p">};</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">Perform the map-reduce operation on the <code class="docutils literal"><span class="pre">orders</span></code> collection using
the <code class="docutils literal"><span class="pre">mapFunction2</span></code>, <code class="docutils literal"><span class="pre">reduceFunction2</span></code>, and
<code class="docutils literal"><span class="pre">finalizeFunction2</span></code> functions.</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">db</span><span class="p">.</span><span class="nx">orders</span><span class="p">.</span><span class="nx">mapReduce</span><span class="p">(</span>
   <span class="nx">mapFunction2</span><span class="p">,</span>
   <span class="nx">reduceFunction2</span><span class="p">,</span>
   <span class="p">{</span>
     <span class="nx">out</span><span class="o">:</span> <span class="p">{</span> <span class="nx">merge</span><span class="o">:</span> <span class="s2">&quot;map_reduce_example2&quot;</span> <span class="p">},</span>
     <span class="nx">query</span><span class="o">:</span> <span class="p">{</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="p">{</span> <span class="nx">$gte</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-01&quot;</span><span class="p">)</span> <span class="p">}</span> <span class="p">},</span>
     <span class="nx">finalize</span><span class="o">:</span> <span class="nx">finalizeFunction2</span>
   <span class="p">}</span>
 <span class="p">);</span>
</pre></div>
</div>
</div>
<p>This operation uses the <code class="docutils literal"><span class="pre">query</span></code> field to select only those
documents with <code class="docutils literal"><span class="pre">ord_date</span></code> greater than or equal to <code class="docutils literal"><span class="pre">new</span>
<span class="pre">Date(&quot;2020-03-01&quot;)</span></code>. Then it output the results to a collection
<code class="docutils literal"><span class="pre">map_reduce_example2</span></code>.</p>
<p>If the <code class="docutils literal"><span class="pre">map_reduce_example2</span></code> collection already exists, the
operation will merge the existing contents with the results of this
map-reduce operation. That is, if an existing document has the same
key as the new result, the operation overwrites the existing
document. If there is no existing document with the same key, the
operation inserts the document.</p>
</li>
<li><p class="first">Query the <code class="docutils literal"><span class="pre">map_reduce_example2</span></code> collection to verify the results:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">db</span><span class="p">.</span><span class="nx">map_reduce_example2</span><span class="p">.</span><span class="nx">find</span><span class="p">().</span><span class="nx">sort</span><span class="p">(</span> <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">1</span> <span class="p">}</span> <span class="p">)</span>
</pre></div>
</div>
</div>
<p>The operation returns the following documents:</p>
<div class="button-code-block">
<div class="button-row">
</div>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;apples&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">30</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mi">10</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;carrots&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">15</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mf">7.5</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;chocolates&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">15</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mi">5</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">6</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">58</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mf">9.666666666666666</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;pears&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mi">10</span> <span class="p">}</span> <span class="p">}</span>
</pre></div>
</div>
</div>
</li>
</ol>
<div class="section" id="id1">
<h4>Aggregation Alternative<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h4>
<div class="docutils container">
<p>Using the available aggregation pipeline operators, you can rewrite
the map-reduce operation without defining custom functions:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">db</span><span class="p">.</span><span class="nx">orders</span><span class="p">.</span><span class="nx">aggregate</span><span class="p">(</span> <span class="p">[</span>
   <span class="p">{</span> <span class="nx">$match</span><span class="o">:</span> <span class="p">{</span> <span class="nx">ord_date</span><span class="o">:</span> <span class="p">{</span> <span class="nx">$gte</span><span class="o">:</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="s2">&quot;2020-03-01&quot;</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">$unwind</span><span class="o">:</span> <span class="s2">&quot;$items&quot;</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">$group</span><span class="o">:</span> <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="s2">&quot;$items.sku&quot;</span><span class="p">,</span> <span class="nx">qty</span><span class="o">:</span> <span class="p">{</span> <span class="nx">$sum</span><span class="o">:</span> <span class="s2">&quot;$items.qty&quot;</span> <span class="p">},</span> <span class="nx">orders_ids</span><span class="o">:</span> <span class="p">{</span> <span class="nx">$addToSet</span><span class="o">:</span> <span class="s2">&quot;$_id&quot;</span> <span class="p">}</span> <span class="p">}</span>  <span class="p">},</span>
   <span class="p">{</span> <span class="nx">$project</span><span class="o">:</span> <span class="p">{</span> <span class="nx">value</span><span class="o">:</span> <span class="p">{</span> <span class="nx">count</span><span class="o">:</span> <span class="p">{</span> <span class="nx">$size</span><span class="o">:</span> <span class="s2">&quot;$orders_ids&quot;</span> <span class="p">},</span> <span class="nx">qty</span><span class="o">:</span> <span class="s2">&quot;$qty&quot;</span><span class="p">,</span> <span class="nx">avg</span><span class="o">:</span> <span class="p">{</span> <span class="nx">$divide</span><span class="o">:</span> <span class="p">[</span> <span class="s2">&quot;$qty&quot;</span><span class="p">,</span> <span class="p">{</span> <span class="nx">$size</span><span class="o">:</span> <span class="s2">&quot;$orders_ids&quot;</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> <span class="p">},</span>
   <span class="p">{</span> <span class="nx">$merge</span><span class="o">:</span> <span class="p">{</span> <span class="nx">into</span><span class="o">:</span> <span class="s2">&quot;agg_alternative_3&quot;</span><span class="p">,</span> <span class="nx">on</span><span class="o">:</span> <span class="s2">&quot;_id&quot;</span><span class="p">,</span> <span class="nx">whenMatched</span><span class="o">:</span> <span class="s2">&quot;replace&quot;</span><span class="p">,</span>  <span class="nx">whenNotMatched</span><span class="o">:</span> <span class="s2">&quot;insert&quot;</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">]</span> <span class="p">)</span>
</pre></div>
</div>
</div>
<ol class="arabic">
<li><p class="first">The <a class="reference internal" href="../operator/aggregation/match.html#pipe._S_match" title="$match"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$match</span></code></a> stage selects only those
documents with <code class="docutils literal"><span class="pre">ord_date</span></code> greater than or equal to <code class="docutils literal"><span class="pre">new</span>
<span class="pre">Date(&quot;2020-03-01&quot;)</span></code>.</p>
</li>
<li><p class="first">The <code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$unwinds</span></code> stage breaks down the document by
the <code class="docutils literal"><span class="pre">items</span></code> array field to output a document for each array
element. For example:</p>
<div class="button-code-block">
<div class="button-row">
</div>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;cust_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Ant O. Knee&quot;</span><span class="p">,</span> <span class="s2">&quot;ord_date&quot;</span> <span class="o">:</span> <span class="nx">ISODate</span><span class="p">(</span><span class="s2">&quot;2020-03-01T00:00:00Z&quot;</span><span class="p">),</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mi">25</span><span class="p">,</span> <span class="s2">&quot;items&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;sku&quot;</span> <span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mf">2.5</span> <span class="p">},</span> <span class="s2">&quot;status&quot;</span> <span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;cust_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Ant O. Knee&quot;</span><span class="p">,</span> <span class="s2">&quot;ord_date&quot;</span> <span class="o">:</span> <span class="nx">ISODate</span><span class="p">(</span><span class="s2">&quot;2020-03-01T00:00:00Z&quot;</span><span class="p">),</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mi">25</span><span class="p">,</span> <span class="s2">&quot;items&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;sku&quot;</span> <span class="o">:</span> <span class="s2">&quot;apples&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mf">2.5</span> <span class="p">},</span> <span class="s2">&quot;status&quot;</span> <span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;cust_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Ant O. Knee&quot;</span><span class="p">,</span> <span class="s2">&quot;ord_date&quot;</span> <span class="o">:</span> <span class="nx">ISODate</span><span class="p">(</span><span class="s2">&quot;2020-03-08T00:00:00Z&quot;</span><span class="p">),</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mi">70</span><span class="p">,</span> <span class="s2">&quot;items&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;sku&quot;</span> <span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">8</span><span class="p">,</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mf">2.5</span> <span class="p">},</span> <span class="s2">&quot;status&quot;</span> <span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;cust_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Ant O. Knee&quot;</span><span class="p">,</span> <span class="s2">&quot;ord_date&quot;</span> <span class="o">:</span> <span class="nx">ISODate</span><span class="p">(</span><span class="s2">&quot;2020-03-08T00:00:00Z&quot;</span><span class="p">),</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mi">70</span><span class="p">,</span> <span class="s2">&quot;items&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;sku&quot;</span> <span class="o">:</span> <span class="s2">&quot;chocolates&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mi">10</span> <span class="p">},</span> <span class="s2">&quot;status&quot;</span> <span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">&quot;cust_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Busby Bee&quot;</span><span class="p">,</span> <span class="s2">&quot;ord_date&quot;</span> <span class="o">:</span> <span class="nx">ISODate</span><span class="p">(</span><span class="s2">&quot;2020-03-08T00:00:00Z&quot;</span><span class="p">),</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mi">50</span><span class="p">,</span> <span class="s2">&quot;items&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;sku&quot;</span> <span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mf">2.5</span> <span class="p">},</span> <span class="s2">&quot;status&quot;</span> <span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">&quot;cust_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Busby Bee&quot;</span><span class="p">,</span> <span class="s2">&quot;ord_date&quot;</span> <span class="o">:</span> <span class="nx">ISODate</span><span class="p">(</span><span class="s2">&quot;2020-03-08T00:00:00Z&quot;</span><span class="p">),</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mi">50</span><span class="p">,</span> <span class="s2">&quot;items&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;sku&quot;</span> <span class="o">:</span> <span class="s2">&quot;pears&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mf">2.5</span> <span class="p">},</span> <span class="s2">&quot;status&quot;</span> <span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="mi">4</span><span class="p">,</span> <span class="s2">&quot;cust_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Busby Bee&quot;</span><span class="p">,</span> <span class="s2">&quot;ord_date&quot;</span> <span class="o">:</span> <span class="nx">ISODate</span><span class="p">(</span><span class="s2">&quot;2020-03-18T00:00:00Z&quot;</span><span class="p">),</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mi">25</span><span class="p">,</span> <span class="s2">&quot;items&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;sku&quot;</span> <span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mf">2.5</span> <span class="p">},</span> <span class="s2">&quot;status&quot;</span> <span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s2">&quot;cust_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;Busby Bee&quot;</span><span class="p">,</span> <span class="s2">&quot;ord_date&quot;</span> <span class="o">:</span> <span class="nx">ISODate</span><span class="p">(</span><span class="s2">&quot;2020-03-19T00:00:00Z&quot;</span><span class="p">),</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mi">50</span><span class="p">,</span> <span class="s2">&quot;items&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;sku&quot;</span> <span class="o">:</span> <span class="s2">&quot;chocolates&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s2">&quot;price&quot;</span> <span class="o">:</span> <span class="mi">10</span> <span class="p">},</span> <span class="s2">&quot;status&quot;</span> <span class="o">:</span> <span class="s2">&quot;A&quot;</span> <span class="p">}</span>
<span class="p">...</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">The <a class="reference internal" href="../operator/aggregation/group.html#pipe._S_group" title="$group"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$group</span></code></a> stage groups by the <code class="docutils literal"><span class="pre">items.sku</span></code>, calculating for each sku:</p>
<ul class="simple">
<li>The <code class="docutils literal"><span class="pre">qty</span></code> field. The <code class="docutils literal"><span class="pre">qty</span></code> field contains the
total <code class="docutils literal"><span class="pre">qty</span></code> ordered per each <code class="docutils literal"><span class="pre">items.sku</span></code> (See <code class="xref mongodb mongodb-expression docutils literal"><span class="pre">$sum</span></code>).</li>
<li>The <code class="docutils literal"><span class="pre">orders_ids</span></code> array. The <code class="docutils literal"><span class="pre">orders_ids</span></code> field contains an
array of distinct order <code class="docutils literal"><span class="pre">_id</span></code>’s for the <code class="docutils literal"><span class="pre">items.sku</span></code> (See
<code class="xref mongodb mongodb-expression docutils literal"><span class="pre">$addToSet</span></code>).</li>
</ul>
<div class="button-code-block">
<div class="button-row">
</div>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;chocolates&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">15</span><span class="p">,</span> <span class="s2">&quot;orders_ids&quot;</span> <span class="o">:</span> <span class="p">[</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">8</span> <span class="p">]</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">63</span><span class="p">,</span> <span class="s2">&quot;orders_ids&quot;</span> <span class="o">:</span> <span class="p">[</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">10</span> <span class="p">]</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;carrots&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">15</span><span class="p">,</span> <span class="s2">&quot;orders_ids&quot;</span> <span class="o">:</span> <span class="p">[</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">9</span> <span class="p">]</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;apples&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">35</span><span class="p">,</span> <span class="s2">&quot;orders_ids&quot;</span> <span class="o">:</span> <span class="p">[</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">6</span> <span class="p">]</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;pears&quot;</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">&quot;orders_ids&quot;</span> <span class="o">:</span> <span class="p">[</span> <span class="mi">3</span> <span class="p">]</span> <span class="p">}</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">The <a class="reference internal" href="../operator/aggregation/project.html#pipe._S_project" title="$project"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$project</span></code></a> stage reshapes the output document to
mirror the map-reduce’s output to have two fields <code class="docutils literal"><span class="pre">_id</span></code> and
<code class="docutils literal"><span class="pre">value</span></code>. The <a class="reference internal" href="../operator/aggregation/project.html#pipe._S_project" title="$project"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$project</span></code></a> sets:</p>
<ul class="simple">
<li>the <code class="docutils literal"><span class="pre">value.count</span></code> to the size of the <code class="docutils literal"><span class="pre">orders_ids</span></code> array. (See <a class="reference internal" href="../operator/aggregation/size.html#exp._S_size" title="$size"><code class="xref mongodb mongodb-expression docutils literal"><span class="pre">$size</span></code></a>.)</li>
<li>the <code class="docutils literal"><span class="pre">value.qty</span></code> to the <code class="docutils literal"><span class="pre">qty</span></code> field of input document.</li>
<li>the <code class="docutils literal"><span class="pre">value.avg</span></code> to the average number of qty per order.  (See <a class="reference internal" href="../operator/aggregation/divide.html#exp._S_divide" title="$divide"><code class="xref mongodb mongodb-expression docutils literal"><span class="pre">$divide</span></code></a> and <a class="reference internal" href="../operator/aggregation/size.html#exp._S_size" title="$size"><code class="xref mongodb mongodb-expression docutils literal"><span class="pre">$size</span></code></a>.)</li>
</ul>
<div class="button-code-block">
<div class="button-row">
</div>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;apples&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">4</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">35</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mf">8.75</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;pears&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mi">10</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;chocolates&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">15</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mi">5</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">7</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">63</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mi">9</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;carrots&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">15</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mf">7.5</span> <span class="p">}</span> <span class="p">}</span>
</pre></div>
</div>
</div>
</li>
<li><p class="first">Finally, the <a class="reference internal" href="../operator/aggregation/merge.html#pipe._S_merge" title="$merge"><code class="xref mongodb mongodb-pipeline docutils literal"><span class="pre">$merge</span></code></a> writes the output to the
collection <code class="docutils literal"><span class="pre">agg_alternative_3</span></code>. If an existing document has the same
key <code class="docutils literal"><span class="pre">_id</span></code> as the new result, the operation overwrites the existing
document. If there is no existing document with the same key, the
operation inserts the document.</p>
</li>
<li><p class="first">Query the <code class="docutils literal"><span class="pre">agg_alternative_3</span></code> collection to verify the results:</p>
<div class="button-code-block">
<div class="button-row">
<a class="code-button--copy code-button" role="button">
copy</a>
</div>
<div class="copyable-code-block highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">db</span><span class="p">.</span><span class="nx">agg_alternative_3</span><span class="p">.</span><span class="nx">find</span><span class="p">().</span><span class="nx">sort</span><span class="p">(</span> <span class="p">{</span> <span class="nx">_id</span><span class="o">:</span> <span class="mi">1</span> <span class="p">}</span> <span class="p">)</span>
</pre></div>
</div>
</div>
<p>The operation returns the following documents:</p>
<div class="button-code-block">
<div class="button-row">
</div>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;apples&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">4</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">35</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mf">8.75</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;carrots&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">15</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mf">7.5</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;chocolates&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">15</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mi">5</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;oranges&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">7</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">63</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mi">9</span> <span class="p">}</span> <span class="p">}</span>
<span class="p">{</span> <span class="s2">&quot;_id&quot;</span> <span class="o">:</span> <span class="s2">&quot;pears&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">:</span> <span class="p">{</span> <span class="s2">&quot;count&quot;</span> <span class="o">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;qty&quot;</span> <span class="o">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">&quot;avg&quot;</span> <span class="o">:</span> <span class="mi">10</span> <span class="p">}</span> <span class="p">}</span>
</pre></div>
</div>
</div>
</li>
</ol>
</div>
</div>
</div>
</div>
<div class="section" id="output">
<h2>Output<a class="headerlink" href="#output" title="Permalink to this headline">¶</a></h2>
<p>The output of the <a class="reference internal" href="#db.collection.mapReduce" title="db.collection.mapReduce()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.mapReduce()</span></code></a> method is
identical to that of the <a class="reference internal" href="../command/mapReduce.html#dbcmd.mapReduce" title="mapReduce"><code class="xref mongodb mongodb-dbcommand docutils literal"><span class="pre">mapReduce</span></code></a> command. See the
<a class="reference internal" href="../command/mapReduce.html#mapreduce-output"><span class="std std-ref">Output</span></a> section of the <a class="reference internal" href="../command/mapReduce.html#dbcmd.mapReduce" title="mapReduce"><code class="xref mongodb mongodb-dbcommand docutils literal"><span class="pre">mapReduce</span></code></a>
command for information on the <a class="reference internal" href="#db.collection.mapReduce" title="db.collection.mapReduce()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.mapReduce()</span></code></a>
output.</p>
</div>
<div class="section" id="restrictions">
<h2>Restrictions<a class="headerlink" href="#restrictions" title="Permalink to this headline">¶</a></h2>
<p>MongoDB drivers automatically set <a class="reference internal" href="../read-concern.html#afterclustertime"><span class="std std-ref">afterClusterTime</span></a> for operations associated with <a class="reference internal" href="../../core/read-isolation-consistency-recency.html#causal-consistency"><span class="std std-ref">causally
consistent sessions</span></a>. Starting in MongoDB 4.2, the
<a class="reference internal" href="#db.collection.mapReduce" title="db.collection.mapReduce()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.mapReduce()</span></code></a> no longer support
<a class="reference internal" href="../read-concern.html#afterclustertime"><span class="std std-ref">afterClusterTime</span></a>. As such,
<a class="reference internal" href="#db.collection.mapReduce" title="db.collection.mapReduce()"><code class="xref mongodb mongodb-method docutils literal"><span class="pre">db.collection.mapReduce()</span></code></a> cannot be associatd with
<a class="reference internal" href="../../core/read-isolation-consistency-recency.html#causal-consistency"><span class="std std-ref">causally consistent sessions</span></a>.</p>
</div>
<div class="section" id="additional-information">
<h2>Additional Information<a class="headerlink" href="#additional-information" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
<li><a class="reference internal" href="../../tutorial/troubleshoot-map-function.html"><span class="doc">Troubleshoot the Map Function</span></a></li>
<li><a class="reference internal" href="../../tutorial/troubleshoot-reduce-function.html"><span class="doc">Troubleshoot the Reduce Function</span></a></li>
<li><a class="reference internal" href="../command/mapReduce.html#dbcmd.mapReduce" title="mapReduce"><code class="xref mongodb mongodb-dbcommand docutils literal"><span class="pre">mapReduce</span></code></a> command</li>
<li><a class="reference internal" href="../../aggregation.html"><span class="doc">Aggregation</span></a></li>
<li><a class="reference internal" href="../../core/map-reduce.html"><span class="doc">Map-Reduce</span></a></li>
<li><a class="reference internal" href="../../tutorial/perform-incremental-map-reduce.html"><span class="doc">Perform Incremental Map-Reduce</span></a></li>
</ul>
</div>
</div>

                
    <div id="btnv">
      <span class="btn-arrow-left">&larr; &nbsp;</span>
      <a class="btn-prev-text" href="db.collection.latencyStats.html" title="Previous Section: db.collection.latencyStats()"><span>db.collection.latencyStats()</span></a>
      <a class="btn-next-text" href="db.collection.reIndex.html" title="Next Section: db.collection.reIndex()"><span>db.collection.reIndex()</span></a>
      <span class="btn-arrow-right">&nbsp;&rarr;</span>
    </div>
                  <div class="footer">
                    <div class="copyright">
                      <p>&copy; MongoDB, Inc 2008-present. MongoDB, Mongo, and the leaf logo are registered trademarks of MongoDB, Inc.</p>
                    </div>
                  </div>
              </div></div>
            </div>
        </div>
    </div>
    <div class="right-column">
      <div class="wrapper"> <div id='mongodb-docs-1'>
   <script type='text/javascript'>
      googletag.cmd.push(function() { googletag.display('mongodb-docs-1'); });
   </script>
</div>
            <div class="social">
               <a class="slack-icon" href="https://slackpass.io/mongo-db?jmp=docs" title="https://slackpass.io/mongo-db?jmp=docs"><i class="fab fa-slack" aria-hidden="true"></i></a>
               <a class="twitter-icon" href="https://twitter.com/MongoDB" title="https://twitter.com/MongoDB"><i class="fab fa-twitter-square"></i></a>
               <a class="youtube-icon" href="https://www.youtube.com/user/MongoDB" title="https://www.youtube.com/user/MongoDB"><i class="fab fa-youtube-square"></i></a>
               <a class="facebook-icon" href="https://www.facebook.com/mongodb" title="https://www.facebook.com/mongodb"><i class="fab fa-facebook-square"></i></a>
               <a class="stack-overflow-icon" href="https://stackoverflow.com/tags/mongodb/info" title="https://stackoverflow.com/tags/mongodb/info"><i class="fab fa-stack-overflow" aria-hidden="true"></i></a>
            </div>
        

      </div>
    </div>
    
      <div id="rating-panel"></div>
    
    <div class="clearfix"></div>
  </div>
  

  <script type="text/javascript">
  // Bootstrap array of links that should trigger a full page reload
  window.docsExcludedNav = ['/administration', '/administration/production-checklist', '/administration/indexes-management', '/aggregation', '/applications/geospatial-indexes', '/applications/indexes', '/contributors/getting-started', '/core/2d', '/core/2dsphere', '/core/auditing', '/core/authentication', '/core/authorization', '/core/backups', '/core/read-isolation-consistency-recency', '/core/databases-and-collections', '/core/geohaystack', '/core/index-single', '/core/index-compound', '/core/index-creation', '/core/index-hashed', '/core/index-multikey', '/core/index-partial', '/core/index-sparse', '/core/index-text', '/core/index-ttl', '/core/index-unique', '/core/index-wildcard', '/core/journaling', '/core/kerberos', '/core/map-reduce', '/core/operational-segregation', '/core/query-optimization', '/core/read-preference', '/core/replica-set-architectures', '/core/replica-set-high-availability', '/core/replica-set-members', '/core/replica-set-secondary', '/core/transactions', '/geospatial-queries', '/replication', '/core/sharded-cluster-components', '/core/wiredtiger', '/core/write-operations-atomicity', '/crud', '/indexes', '/installation', '/introduction', '/mongo', '/products/bi-connector', '/reference/command', '/reference/collation', '/text-search', '/tutorial/manage-the-database-profiler', '/core/index-text', '/reference/bson-types', '/reference/configuration-options', '/reference/indexes', '/reference/method', '/reference/operator/aggregation', '/reference/operator/query', '/reference/operator/query-modifier', '/reference/operator/update', '/reference/replication', '/reference/read-concern', '/reference/security', '/reference/sharding', '/reference/write-concern', '/release-notes/2.4', '/release-notes/2.6', '/release-notes/2.8', '/release-notes/3.0', '/release-notes/3.2', '/release-notes/3.4', '/release-notes/3.6', '/release-notes/4.0', '/release-notes/4.2', '/security', '/sharding', '/changeStreams', '/core/zone-sharding', '/core/hashed-sharding', '/core/ranged-sharding', '/storage', '/tutorial/change-sharded-cluster-wiredtiger', '/tutorial/insert-documents', '/tutorial/query-documents', '/tutorial/remove-documents', '/tutorial/update-documents', '/tutorial/enable-authentication', '/tutorial/install-mongodb-on-ubuntu', '/tutorial/install-mongodb-on-windows', '/tutorial/install-mongodb-on-red-hat', '/tutorial/install-mongodb-on-debian', '/tutorial/install-mongodb-on-suse', '/tutorial/install-mongodb-on-amazon', '/tutorial/install-mongodb-enterprise-on-ubuntu', '/tutorial/install-mongodb-enterprise-on-windows', '/tutorial/install-mongodb-enterprise-on-red-hat', '/tutorial/install-mongodb-enterprise-on-debian', '/tutorial/install-mongodb-enterprise-on-suse', '/tutorial/install-mongodb-enterprise-on-amazon', '/tutorial/install-mongodb-on-os-x'];
  </script></body>
</html>